【问题标题】:How to cast Python string representation of a dict back to a dict [duplicate]如何将 dict 的 Python 字符串表示形式转换回 dict [重复]
【发布时间】:2022-01-19 18:38:09
【问题描述】:

我在 Pandas 数据框中有一列,其中包含带有 Python 原生类型的字典(如字符串、整数、浮点数等)。

将此数据框保存在 csv 文件中并重新加载后,这些值将作为字符串加载,并且似乎无法将它们转换回字典。字典的 Python 字符串表示不是 JSON(单引号而不是双引号,布尔值以大写字母而不是小写字母开头),因此无法使用 json.loads()

考虑这个例子:

import json
import pandas as pd

df = pd.DataFrame({'dict_column' : [{'key' : 'val'}]})
df.iloc[0, 0]['key'] --> returns 'val'

df.to_csv('file.csv', index=False)

df_loaded = pd.read_csv('file.csv')
df_loaded.iloc[0, 0]['key'] --> returns an error
json.loads(df_loaded.iloc[0, 0]) --> returns an error

因此,在将数据帧保存到 csv 之前,在 dict 列上应用 json.dumps 似乎非常重要。但是如何处理现有的 CSV?无论如何将 dict 的字符串表示形式转换回 dict ?我有一个这样保存的巨大数据框,我不想丢失其中的数据。

希望有比直接将CSV文件中的单引号替换成双引号更好的解决方案。

【问题讨论】:

  • 您可以使用ast.literal_eval() 将字符串表示形式转换回字典。
  • 你只想要eval
  • 注意,一般来说,您不想在 pandas 数据帧中使用字典。如果您这样做,请考虑使用pickle 来保存您的数据框。

标签: python json pandas dataframe dictionary


【解决方案1】:

试试:

df_loaded["dict_column"] = df_loaded["dict_column"].apply(eval)
df_loaded.iloc[0, 0]['key'] # Now returns 'val'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多