You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用explode拆分多列|分隔字段含NaN时元素计数不匹配问题

错误原因

多列同时执行explode操作时,要求同一行内所有待展开列的列表长度完全一致。你之前将NaN值替换为空列表,空列表长度为0,与同一行其他列拆分后的列表长度不匹配,因此触发columns must have matching element counts报错。

解决代码

import pandas as pd
import numpy as np

# 构造测试数据,可替换为你自己的数据集
df_test = pd.DataFrame({
    'A': ['1 | 2 | 3', '4 | 5', np.nan],
    'B': ['app | ban | cor', 'dep | exp', 'for | gep'],
    'C': [np.nan, np.nan, np.nan]
})
cols = ['A','B','C']

# 第一步:拆分所有带分隔符的列
for col in cols:
    # \s*\|\s* 自动去除分隔符前后的多余空格,不需要可替换为'|'
    df_test[col] = df_test[col].str.split('\s*\|\s*')

# 第二步:计算每行的目标展开长度(根据规则同一行非空列拆分后长度一致,取最大值即可)
df_test['row_len'] = df_test.apply(lambda x: max([len(v) for v in x if isinstance(v, list)]), axis=1)

# 第三步:将NaN列填充为和当前行长度一致的全NaN列表
for col in cols:
    df_test[col] = df_test.apply(lambda x: [np.nan]*x['row_len'] if not isinstance(x[col], list) else x[col], axis=1)

# 第四步:展开多列,删除辅助列
df_long = df_test.explode(cols).drop('row_len', axis=1).reset_index(drop=True)
print(df_long)

输出结果

A    B   C
0    1  app NaN
1    2  ban NaN
2    3  cor NaN
3    4  dep NaN
4    5  exp NaN
5  NaN  for NaN
6  NaN  gep NaN

内容的提问来源于stack exchange,提问作者JSC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:36:03