python 正在从csv阅读包含单元格中字典的panda Dataframe

wpcxdonn  于 2022-12-28  发布在  Python
关注(0)|答案(4)|浏览(102)

我保存了一个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={},以及将****'dict'**替换为'dictionary'、'object'和'str'。

uurity8g

uurity8g1#

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最适合于连续的内存块,例如将数字数据分成数字序列。

piztneat

piztneat2#

您也可以在阅读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'])
hi3rlvi2

hi3rlvi23#

(我没有足够的声誉来评论)即使在给出ast.literal_eval之后,我也会遇到“ValueError:某些dict列上的节点或字符串”“格式不正确。
修正了dict中的间距,为我修正了这个问题。例如-
之前
第一个月

ast.literal_eval("{'word': 5.7}, {'khfds': 8.34}")
希望这对某人有帮助

1cklez4t

1cklez4t4#

您也可以使用简单明了的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

相关问题