可以转换,应该是使用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是的,我刚刚看到。感谢你丰富的答案,我从他们身上学到了很多。 –