在 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_eval
将 configuration
转换为 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
我有这个数据:
#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_eval
将 configuration
转换为 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