如何将熊猫数据框中的嵌套逗号分隔列转换为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中的特定格式的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]

如何将包含列表的列转换为熊猫数据框中的单独列? [复制]

将逗号小数分隔符转换为数据框中的点

将逗号小数分隔符转换为数据框中的点

如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?

将字符串的所有字母字符转换为熊猫数据框中单独列中的整数