gpt4 book ai didi

python - 将 panda 列中的 json 字符串值提取到第一级具有动态键的新列中

转载 作者:行者123 更新时间:2023-12-02 00:09:52 26 4
gpt4 key购买 nike

您好,我在 csv 文件中有一个非常大的数据集,我将其读入 Pandas 数据框。一列有我想将值提取到新列中的 json 字符串。下图显示了我的 csv 文件中的几行。

this is example of my csv datafile.

第四列(数据)是需要提取的列。第一级中的 key (605,254,834,265 等)始终在变化,但数字始终与最后一列('reg')中的数字相同。我想提取“价格”、“状态”和“#result”的值并将它们放入新列中。

我使用的代码是

import pandas as pd
import numpy as np
import json
from pandas import DataFrame
df = pd.read_csv('sample.csv')
df["result"]=np.nan #create empty column
df["price"]=np.nan
df["status"]=np.nan
for i in range (0,len(df['data'])):
df['result'].iloc[i]=json.loads(df['data'].iloc[i])[str(df['reg'].iloc[i])]['#result']
df['price'].iloc[i]=json.loads(df['data'].iloc[i])[str(df['reg'].iloc[i])]['price']
df['status'].iloc[i]=json.loads(df['data'].iloc[i])[str(df['reg'].iloc[i])]['status']

print(df)

所以我得到了包含新列(结果、价格和状态)的数据框,如下所示:

enter image description here

代码给出了我想要的输出。但是,由于我使用的是“for 循环”,因此运行大数据帧需要很长时间。我认为必须有更聪明的方法来做到这一点。而且我知道如果第一级 key 不变,则有不同的方法。谁能有更好的主意在 Pandas 框架中提取这种类型的 json 字符串。干杯!

最佳答案

在您的示例中,您多次解析相同的 JSON。只解析一次就足够了。例如:

import pandas as pd

d1 = '{"605":{"price":"570", "address":"946", "status": "done", "#result":"good" }}'
d2 = '{"254":{"price":"670", "address":"300", "status": "done", "classification_id": "102312321", "#result":"good" }}'

df = pd.DataFrame({'num': [1771, 905],
'item': ['orange', 'mango'],
'id': [190384, 2500003],
'data':[d1, d2],
'reg': [605, 254]
})


import json
df = df.join( pd.DataFrame(list(json.loads(d).values())[0] for d in df.pop('data')) )

# drop columns we don't want
del df['address']
del df['classification_id']

print(df)

打印:

    num    item       id  reg price status #result
0 1771 orange 190384 605 570 done good
1 905 mango 2500003 254 670 done good

关于python - 将 panda 列中的 json 字符串值提取到第一级具有动态键的新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423816/

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