如何将熊猫数据框中的嵌套逗号分隔列转换为Python中的特定格式
Posted
技术标签:
【中文标题】如何将熊猫数据框中的嵌套逗号分隔列转换为Python中的特定格式【英文标题】:How to convert nested comma separated column inside a pandas data frame to specific format in Python 【发布时间】:2022-01-19 05:30:42 【问题描述】:我有数据框(df)
如下图
输入
Df
ID linkedShipments
12 ['SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '2021121', 'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211215']
32 ['SID': 'CHSGI422', 'Code': 'CHSGI421', 'Num': '4024421', 'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211222']
预期输出
ID SID Code Num
12 GBDXY551 GBDXY55 2021121
12 GBDXY551 GBDXY55 20211215
32 CHSGI422 CHSGI421 4024421
32 GBDXY551 GBDXY55 20211222
如何在 pandas 中做到这一点?
【问题讨论】:
linkedShipments
是字典列表还是 JSON 格式字符串?
@QuangHoang,它的 JSON 格式字符串
@QuangHoang,任何解决方案
【参考方案1】:
最简单的方法是:
-
json.loads 每一行linkedShipments
遍历linkedShipments中的所有元素
将 ID 和 linkedShipments 的每个元素组合为行字典
附加到新数据
下面是python代码
import pandas as pd
import json
#The simulation of data
data = "ID": [12, 24],
"linkedShipments": ["['SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '2021121', 'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211215']",
"['SID': 'CHSGI422', 'Code': 'CHSGI421', 'Num': '4024421', 'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211222']"]
#load as dataframe
df = pd.DataFrame(data)
new_data = #define new data
#treverse all rows in current data
for index, row in df.iterrows():
#json only accept double quotes, so convert singal quotes to double quotes
shipment_dict_list = json.loads(row['linkedShipments'].replace("\'", "\""))
for shipment_dict in shipment_dict_list:
new_data.setdefault("ID",[]).append(row['ID'])
for key in shipment_dict:
new_data.setdefault(key,[]).append(shipment_dict[key])
print(pd.DataFrame(new_data))
结果如下:
ID SID Code Num
0 12 GBDXY551 GBDXY55 2021121
1 12 GBDXY551 GBDXY55 20211215
2 24 CHSGI422 CHSGI421 4024421
3 24 GBDXY551 GBDXY55 20211222
【讨论】:
@konara39,得到一个错误 unsupported operand type(s) for |: 'dict' and 'dict' @pankaj 可能你用的是 Python 3.8 或更低版本,我编辑了 python 代码,你可以再检查一下以上是关于如何将熊猫数据框中的嵌套逗号分隔列转换为Python中的特定格式的主要内容,如果未能解决你的问题,请参考以下文章