Python 从csv读取单元格中包含字典的数据帧

Python 从csv读取单元格中包含字典的数据帧,python,pandas,dataframe,csv,dictionary,Python,Pandas,Dataframe,Csv,Dictionary,我将如下所示的熊猫数据框保存为csv文件 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文件,以与创建时相同的形式恢复数据帧。我还尝试过在不使用的情况下阅读,数据类型=

我将如下所示的熊猫数据框保存为csv文件

    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文件,以与创建时相同的形式恢复数据帧。我还尝试过在不使用的情况下阅读,数据类型={},以及用诸如“字典”、“对象”和“str”之类的替代项替换的dict'

CSV文件可能只包含文本,因此字典超出了范围。因此,您需要逐字阅读文本才能转换为
dict
。一种方法是使用:

将熊猫作为pd导入
从ast导入文字值
从io导入StringIO
mystr=StringIO(““”a
{'word':5.7}
{'khfds':8.34}“(以“)”)
df=pd.read\u csv(mystr)
df['a']=df['a'].应用(文字评估)
打印(df['a'].apply(λx:type(x)))
0
1.
名称:a,数据类型:对象

但是,我强烈建议您不要专门使用Pandas来存储指向词典的指针。Pandas最适用于连续内存块,例如,将数字数据分成数字系列。

您也可以使用普通和简单的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
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'])
将熊猫作为pd导入
从io导入StringIO
mystr=StringIO(““”a
{'word':5.7}
{'khfds':8.34}“(以“)”)
df=pd.read\u csv(mystr)
df['a']=df['a'].应用(评估)
打印(df['a'].apply(λx:type(x)))
0
1.
名称:a,数据类型:对象

您也可以在读取csv文件时直接转换为字典,如下所示:

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
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'])

是的,同样的错误。你对储存字典有什么建议?我的建议是重新格式化。一列用于字符串键,另一列用于数值。这方面有很多问题,但是如果你被卡住了,欢迎你提出一个新的问题。你的答案和上面的有什么区别!?