gpt4 book ai didi

python - 在 Pandas 中操作数据框的数据

转载 作者:行者123 更新时间:2023-12-01 06:44:53 26 4
gpt4 key购买 nike

我正在读取数据帧并将其转换为 json 文件。我使用 python 3 和 0.25.3 版本的 pandas 。我已经从你们那里得到了一些帮助( Manipulating data of Pandas dataframe ),但我对代码及其工作原理有一些疑问。

我的数据框:

id     label        id_customer     label_customer    part_number   number_client

6 Sao Paulo CUST-99992 Brazil 7897 982

6 Sao Paulo CUST-99992 Brazil 888 12

92 Hong Kong CUST-88888 China 147 288

代码:

import pandas as pd

data = pd.read_excel(path)

data[["part_number","number_client"]] = data[["part_number","number_client"]].astype(str)

f = lambda x: x.split('_')[0]

j =(data.groupby(["id","label","id_customer","label_customer"])['part_number','number_client']
.apply(lambda x: x.rename(columns=f).to_dict('r')).reset_index(name='Number')
.groupby(["id", "label"])[ "id_customer", "label_customer", "Number"]
.apply(lambda x: x.rename(columns=f).to_dict('r')).reset_index(name='Customer')
.to_json(orient='records'))

print (j)

我得到的 Json:

[{
"id": 6,
"label": "Sao Paulo",
"Customer": [{
"id": "CUST-99992",
"label": "Brazil",
"number": [{
"part": "7897",
"client": "982"
},
{
"part": "888",
"client": "12"
}
]
}]
},
{
"id": 92,
"label": "Hong Kong",
"Customer": [{
"id": "CUST-888888",
"label": "China",
"number": [{
"part": "147",
"client": "288"
}]
}]
}
]

第一个问题: lambdaapply_ 时,函数正在分割我的列名称找到了..这只是我的数据框的一部分和我想保留名称的一些列..例如:我想得到 part_numbernumber_client相反 partclient在我的 json 结构中。我该如何解决这个问题?

第二个问题:我可以有具有相同键名称的不同列表。例如:在 customer我有 list part_number键,但我也可以在另一个列表中使用具有另一个值的相同名称的键。例如:part_number里面test列表。

第三个问题:在我的完整数据框中,我有一列名为 Additional_information当我有一个简单的文本时。我必须得到这样的结构:

...

"Additional_information":[{
{
"text": "testing",
}
},
{
"text": "testing again",
}
]

对于这样的数据框:

id     label        id_customer     label_customer    part_number   number_client    Additional_information

6 Sao Paulo CUST-99992 Brazil 7897 982 testing

6 Sao Paulo CUST-99992 Brazil 7897 982 testing again

我应该改变什么?

最佳答案

第一个问题:

您可以编写自定义函数来重命名,例如像:

def f(x):
vals = ['part_number', 'number_client']
if x in vals:
return x
else:
return x.split('_')[0]

第二个问题

如果我理解正确的话,最终 json 中的键是从原始 Dataframe 的列创建的,也是通过参数 name 创建的通过reset_index我的解决方案。如果想要更改键(列名称)的其他逻辑,可以更改第一个解决方案。

第三个问题

原解决方案已更改to_jsonto_dict对于可能的修改字典的最终列表,如附加 text信息,使用json json.dumps最后一步:

import json

def f(x):
vals = ['part_number', 'number_client']
if x in vals:
return x
else:
return x.split('_')[0]

d =(data.groupby(["id","label","id_customer","label_customer"])['part_number','number_client']
.apply(lambda x: x.rename(columns=f).to_dict('r')).reset_index(name='Number')
.groupby(["id", "label"])[ "id_customer", "label_customer", "Number"]
.apply(lambda x: x.rename(columns=f).to_dict('r')).reset_index(name='Customer')
.to_dict(orient='records'))

#print (d)

d1 = (data[['Additional_information']].rename(columns={'Additional_information':'text'})
.to_dict(orient='records'))
d1 = {'Additional_information':d1}
print (d1)
{'Additional_information': [{'text': 'testing'}, {'text': 'testing again'}]}

d.append(d1)
#print (d)

j = json.dumps(d)
#print (j)

关于python - 在 Pandas 中操作数据框的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59276102/

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