【问题标题】:How to convert nested comma separated column inside a pandas data frame to specific format in Python如何将熊猫数据框中的嵌套逗号分隔列转换为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,任何解决方案

标签: python python-3.x pandas dataframe


【解决方案1】:

最简单的方法是:

  1. json.loads 每一行linkedShipments
  2. 遍历linkedShipments中的所有元素
  3. 将 ID 和 linkedShipments 的每个元素组合为行字典
  4. 附加到新数据

下面是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 代码,你可以再检查一下
猜你喜欢
  • 2015-11-20
  • 2021-12-06
  • 2022-01-25
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2022-10-07
  • 2020-07-26
  • 2022-01-21
相关资源
最近更新 更多