gpt4 book ai didi

python - 当从 csv 读取到数据框 pandas python 时,dict 对象转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:33 26 4
gpt4 key购买 nike

我有一个 csv 文件,其中有很多列。一列包含 dict 对象和字符串形式的数据。

例如:列包含如下数据:{"a":5,"b":6,"c":8},"usa","india",{"a":9,"b": 10,"c":11}

当我使用以下命令将此 csv 读入数据框时:

df = pd.read_csv(path)

当我执行 df.applymap(type) 时,此列数据被识别为字符串检查存储在此特定列中的每个元素的类型。

但是数据在 csv 和数据框中都没有引号。但仍然将字典对象转换为字符串并存储在数据框中。

在检查列的类型时,结果是对象。

请建议如何从 csv 读取到数据框中,以便将 dict 对象识别为 dict 并将字符串识别为该特定列中的字符串。

最佳答案

您可以使用 literal_eval 转换应为字典(或其他类型)的字符串:

from ast import literal_eval

def try_literal_eval(s):
try:
return literal_eval(s)
except ValueError:
return s

现在您可以将其应用于您的 DataFrame:

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 对象,因此事情会相对缓慢... 非规范化可能是个好主意,即将数据作为列返回,例如使用 json_normalize .

关于python - 当从 csv 读取到数据框 pandas python 时,dict 对象转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com