我保存了一个像csv文件一样的pandas数据框。
a
0 {'word': 5.7}
1 {'khfds': 8.34}
当我尝试读取如下所示的数据帧时,收到以下错误。
df = pd.read_csv('foo.csv', index_col=0, dtype={'str': 'dict'})
TypeError: data type "dict" not understood
我的问题的核心是如何读取csv文件以与创建时相同的形式恢复数据框。我也尝试阅读不 dtype = {} 以及替换 'dict'与其他替代方案'字典','对象'和'str'。
答案 0 :(得分:2)
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最适用于连续的内存块,例如:将数字数据分成数字系列。
答案 1 :(得分:0)
您还可以如下使用普通和简单的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
答案 2 :(得分:0)
您也可以在读取 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'])