如何在Pandas中合并含空值的boxes与pallets列并拆分?
解决Pandas合并列并拆分的空值处理问题
原始数据集
| order | point | city | boxes | pallets | |--| -- | -- | -- | -- | | o12345 | 1 | X |b0|p0,p1| |o12345|2|Y|-|p2,p3,p4| |o12345|3|Z|b1|-| |o34567|1|Q|-|-| |o34567|2|W|b2,b3|p5,p6| |o34567|3|E|-|p7| |o34567|4|R|b4,b5|p8,p9,p10|
需求与问题
需要合并boxes和pallets列为cargo列,再将cargo拆分为每行一个值。原代码直接用+拼接会因为空值(表格中的-)导致结果异常,比如出现,b0或者p2,p3,p4,这类多余逗号的情况。
解决方案
步骤1:读取数据并替换空标记
先把表格中的-替换为空字符串,避免拼接时产生多余逗号:
import pandas as pd # 读取Excel文件(实际使用时替换为你的文件路径) df = pd.read_excel('example.xlsx') # 将'-'替换为空字符串 df[['boxes', 'pallets']] = df[['boxes', 'pallets']].replace('-', '')
步骤2:合并列生成cargo
使用str.cat方法拼接,自动忽略空值,避免多余逗号:
# 合并boxes和pallets,用逗号分隔,空值不参与拼接 df['cargo'] = df['pallets'].str.cat(df['boxes'], sep=',', na_rep='') # 清理首尾可能的逗号,空字符串转为NA df['cargo'] = df['cargo'].str.strip(',').replace('', pd.NA)
步骤3:拆分cargo为每行一个值
用str.split结合explode方法拆分,空值保持原样:
# 拆分cargo列并展开为多行 result = df.assign(cargo=df['cargo'].str.split(',')).explode('cargo', ignore_index=True) # 可选:如果需要移除cargo为空的行,取消下面注释 # result = result.dropna(subset=['cargo']) print(result)
最终结果
执行后会得到每行对应一个货物的表格,示例输出如下:
order point city boxes pallets cargo 0 o12345 1 X b0 p0,p1 p0 1 o12345 1 X b0 p0,p1 p1 2 o12345 1 X b0 p0,p1 b0 3 o12345 2 Y p2,p3,p4 p2 4 o12345 2 Y p2,p3,p4 p3 5 o12345 2 Y p2,p3,p4 p4 6 o12345 3 Z b1 b1 7 o34567 1 Q 8 o34567 2 W b2,b3 p5,p6 p5 9 o34567 2 W b2,b3 p5,p6 p6 10 o34567 2 W b2,b3 p5,p6 b2 11 o34567 2 W b2,b3 p5,p6 b3 12 o34567 3 E p7 p7 13 o34567 4 R b4,b5 p8,p9,p10 p8 14 o34567 4 R b4,b5 p8,p9,p10 p9 15 o34567 4 R b4,b5 p8,p9,p10 p10 16 o34567 4 R b4,b5 p8,p9,p10 b4 17 o34567 4 R b4,b5 p8,p9,p10 b5
内容的提问来源于stack exchange,提问作者bluekit46
相关产品推荐
相关产品推荐

