在 pandas 中的 csv 中解析 json 无效

Parsing json in csv in pandas not working

我有这个数据:

#my.csv
"accountid","configuration"
"797847293","{'dBInstanceIdentifier': 'grafanadb', 'dBInstanceClass': 'db.t3.micro', 'engine': 'postgres', 'dBInstanceStatus': 'available'}"

如何导入格式如下:

# result.csv
accountid,dBInstanceIdentifier,dbInstanceClass,engine
797847293,grafanadb,db.t3.micro,engine

我用 python pandas 试过了,但到目前为止还没有结果,分别是错误。

有什么想法吗?

假设您从某个数据源获得了这个 csv 文件,它的格式不应该如此不一致并且应该在第二行末尾有一个双引号 " 我相信你抄过来的时候漏掉了。像这样:

#my.csv
"accountid","configuration"
"797847293","{'dBInstanceIdentifier': 'grafanadb', 'dBInstanceClass': 'db.t3.micro', 'engine': 'postgres', 'dBInstanceStatus': 'available'}"

如果是这种情况,您只需在 pd.read_csv 中指定 quotechar 参数,告诉它忽略双引号内的定界符 "

df = pd.read_csv('a.csv', quotechar='"')

然后您可以在 pandas 中进行处理,然后再从此处写回 csv。

您可以将 csv 读取到数据帧并使用 ast.literal_evalconfiguration 转换为 dict。然后使用pd.json_normalize将字典的一列转换成列。

import ast

df = pd.read_csv('data.csv', quotechar='"')

out = pd.concat([df['accountid'], pd.json_normalize(df['configuration'].apply(ast.literal_eval))], axis=1)
print(out)

   accountid dBInstanceIdentifier dBInstanceClass    engine dBInstanceStatus
0  797847293            grafanadb     db.t3.micro  postgres        available