gpt4 book ai didi

python - 提取 pandas 中包含多行和多列的 JSON 字符串列的部分

转载 作者:行者123 更新时间:2023-12-01 00:43:03 25 4
gpt4 key购买 nike

我有一个数据框,其中 parameters 列是 JSON,并且包含多个实际行和列:

input_data = pandas.DataFrame({'id':['0001','0002','0003'],
'parameters':["{'product':['book','cat','fish'],'person':['me','you']}",
"'{'product':['book','cat'],'person':['me','you','us']}'",
"'{'product':['apple','snake','rabbit','octopus'],'person':['them','you','us','we','they']}'"]})

...我想从中提取以下数据帧:

product_data = pandas.DataFrame({'id':['0001','0001','0001','0002','0002','0003','0003','0003','0003'],
'product':['book','cat','fish','book','cat','apple','snake','rabbit','octopus']})


person_data = pandas.DataFrame({'id':['0001','0001','0002','0002','0002','0003','0003','0003','0003','0003'],
'person':['me','you','me','you','us','them','you','us','we','they']})

下面是我如何利用正则表达式来实现这一目标。我怀疑这是最好的方法,但它是这样的:

for i in input_data.id.tolist():
s = ''.join(input_data[input_data.id == i]['parameters'])
product_string = re.search(r"product':(.*?),'person", str(s)).group(1)
product_data = pandas.DataFrame(product_string[1:-1].split(','))
person_string = re.search(r"person':(.*?)}", str(s)).group(1)
person_data = pandas.DataFrame(person_string[1:-1].split(','))
print("........")
print(product_data)
print("........")
print(person_data)

我想学习一种更快、更优雅或更有益健康的解决方案,它可以捕获意想不到的细微差别。

最佳答案

首先,使用 str.get 设置您的产品和人员访问器

input_data['products'] = input_data.parameters.str.get('product')

现在,对于 Pandas >= 0.25.0 ,您可以使用explode方法

input_data.explode('products')

对于 Pandas <= 0.25.0 ,您可以引用to this thread

<小时/>

我假设您的数据框中有字典,而不是您在此处公开的字符串

如果你有字符串,你可能总是

import ast
input_data.parameters.apply(ast.literal_eval)

使它们成为真正的词典。

关于python - 提取 pandas 中包含多行和多列的 JSON 字符串列的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192086/

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