可以轉換,應該是使用literal_eval
類型的字典(或其他類型)的字符串:
from ast import literal_eval
def try_literal_eval(s):
try:
return literal_eval(s)
except ValueError:
return s
現在,您可以將此到您的數據幀:
In [11]: df = pd.DataFrame({'A': ["hello","world",'{"a":5,"b":6,"c":8}',"usa","india",'{"d":9,"e":10,"f":11}']})
In [12]: df.loc[2, "A"]
Out[12]: '{"a":5,"b":6,"c":8}'
In [13]: df
Out[13]:
A
0 hello
1 world
2 {"a":5,"b":6,"c":8}
3 usa
4 india
5 {"d":9,"e":10,"f":11}
In [14]: df.applymap(try_literal_eval)
Out[14]:
A
0 hello
1 world
2 {'a': 5, 'b': 6, 'c': 8}
3 usa
4 india
5 {'d': 9, 'e': 10, 'f': 11}
In [15]: df.applymap(try_literal_eval).loc[2, "A"]
Out[15]: {'a': 5, 'b': 6, 'c': 8}
注:這是相當昂貴(在時間上)就其他調用而言,但是當你在處理DataFrames/Series中的字典時,你必須默認回到python對象,所以事情會比較慢......這可能是一個好主意反規範化即將數據返回爲列e。 G。使用json_normalize
。
這就是熊貓如何表示複雜的數據類型。 –
@cᴏʟᴅsᴘᴇᴇᴅ這來自一個較早的問題,其中條目恰好是字符串而不是字典。我想這個可能突出顯示的微妙差別是「a」而不是「a」! –
@AndyHayden是的,我剛剛看到。感謝你豐富的答案,我從他們身上學到了很多。 –