gpt4 book ai didi

python - 从 csv 文件 python 解析字典

转载 作者:行者123 更新时间:2023-12-03 23:47:26 24 4
gpt4 key购买 nike

我正在从 csv 文件中读取数据,例如:

import pandas as pd
data_1=pd.read_csv("sample.csv")
data_1.head(10)

它有两列:

ID   detail
1 [{'a': 1, 'b': 1.85, 'c': 'aaaa', 'd': 6}, {'a': 2, 'b': 3.89, 'c': 'bbbb', 'd': 10}]

详细信息列不是 json,而是字典,我想展平字典并希望得到如下结果:

ID  a   b     c     d
1 1 1.85 aaaa 6
1 2 3.89 bbbb 10

我总是在detail列中得到a,b,c,d,想把最终的结果移动到一个sql表中。

谁能帮我解决一下。

最佳答案

使用ast.literal 的字典理解将字符串 repr 转换为字典列表并将其转换为 DataFrame,然后使用 concat并将第一级 MultiIndex 转换为 ID 列:

import ast

d = {i: pd.DataFrame(ast.literal_eval(d)) for i, d in df[['ID','detail']].to_numpy()}
#for oldier pandas version use .values
#d = {i: pd.DataFrame(ast.literal_eval(d)) for i, d in df[['ID','detail']].values)}
df = pd.concat(d).reset_index(level=1, drop=True).rename_axis('ID').reset_index()
print (df)
ID a b c d
0 1 1 1.85 aaaa 6
1 1 2 3.89 bbbb 10

或者使用 lsit 理解 DataFrame.assign对于 ID 列,只需更改列的顺序 - 最后一列到第一列:

import ast

L = [pd.DataFrame(ast.literal_eval(d)).assign(ID=i) for i, d in df[['ID','detail']].to_numpy()]
#for oldier pandas versions use .values
#L = [pd.DataFrame(ast.literal_eval(d)).assign(ID=i) for i, d in df[['ID','detail']].values]
df = pd.concat(L, ignore_index=True)
df = df[df.columns[-1:].tolist() + df.columns[:-1].tolist()]
print (df)
ID a b c d
0 1 1 1.85 aaaa 6
1 1 2 3.89 bbbb 10

编辑:

对于 2 个 ID,更改第二种解决方案:

d = [pd.DataFrame(ast.literal_eval(d)).assign(ID1=i1, ID2=i2) for i1, i2, d in df[['ID1','ID2','detail']].to_numpy()]
df = pd.concat(d)
df = df[df.columns[-2:].tolist() + df.columns[:-2].tolist()]

关于python - 从 csv 文件 python 解析字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60333312/

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