[英]Reading pandas dataframe that contains dictionaries in cells from csv
我将如下所示的 pandas dataframe 保存为 csv 文件。
a
0 {'word': 5.7}
1 {'khfds': 8.34}
当我尝试如下所示读取 dataframe 时,我收到以下错误。
df = pd.read_csv('foo.csv', index_col=0, dtype={'str': 'dict'})
TypeError: data type "dict" not understood
我的问题的核心是如何读取 csv 文件以恢复 dataframe 与创建时相同的形式。 我也试过在没有dtype={}的情况下阅读以及用诸如“dictionary”、“object”和“str”之类的替代项替换“dict ”。
CSV 文件可能只包含文本,因此字典超出了范围。 因此,您需要逐字阅读文本以转换为dict
。 一种方法是使用ast.literal_eval
:
import pandas as pd
from ast import literal_eval
from io import StringIO
mystr = StringIO("""a
{'word': 5.7}
{'khfds': 8.34}""")
df = pd.read_csv(mystr)
df['a'] = df['a'].apply(literal_eval)
print(df['a'].apply(lambda x: type(x)))
0 <class 'dict'>
1 <class 'dict'>
Name: a, dtype: object
但是,我强烈建议您不要专门使用 Pandas 来存储指向字典的指针。 Pandas 最适用于连续的内存块,例如将数字数据分成数字系列。
您也可以在读取 csv 文件时直接转换为字典,如下所示:
import pandas as pd
from ast import literal_eval
from io import StringIO
mystr = StringIO("""a
{'word': 5.7}
{'khfds': 8.34}""")
df = pd.read_csv(mystr, converters={'a': literal_eval})
print(df.iloc[0]['a']['word'])
(我没有足够的声誉来发表评论)即使在给出 ast.literal_eval 之后,我在某些 dict 列上也有“ValueError:节点或字符串格式错误”。
修复字典中的间距,为我解决了这个问题。 例子 -
前
ast.literal_eval("{'word': 5.7}, {'khfds': 8.34}")
后
ast.literal_eval("{'word': 5.7}, {'khfds': 8.34}")
希望这对某人有帮助
你也可以使用简单的python eval,如下所示:
import pandas as pd
from io import StringIO
mystr = StringIO("""a
{'word': 5.7}
{'khfds': 8.34}""")
df = pd.read_csv(mystr)
df['a'] = df['a'].apply(eval)
print(df['a'].apply(lambda x: type(x)))
0 <class 'dict'>
1 <class 'dict'>
Name: a, dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.