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

Python Pandas拆分含逗号列并删原列报ValueError,求排查

问题原因及解决方案

你的错误出在两个关键点:

  • 未限制拆分次数:str.split(',', expand=True)会默认拆分单元格内所有逗号,如果某行数据里逗号数量超过1个,拆分后得到的列数就会和你从列名拆分出的新列名数量不一致,触发ValueError: Columns must be same length as key。
  • 拆分后的值未清理空格:拆分出来的子字符串带有前导或尾随空格(比如' Bhutan'),会导致数据格式不规整。

修正后的函数如下,我们限制只拆分第一个逗号,同时清理每个拆分结果的空格:

def splitDropCols(col_name, df):
    # 拆分列名并清理空格
    new_col_names = [x.strip() for x in col_name.split(',')]
    # 只拆分第一个逗号,同时清理每个拆分值的空格
    split_data = df[col_name].str.split(',', n=1, expand=True).apply(lambda x: x.str.strip())
    # 赋值新列
    df[new_col_names] = split_data
    # 删除原列
    df.drop(columns=col_name, inplace=True)
    return df

调用示例

针对你提供的示例数据,循环处理所有包含逗号的列即可:

import pandas as pd

df = pd.DataFrame({'City, Country': ['Thimphu, Bhutan', 'NY, USA', 'London, UK'],
                   'Currency, POP':['BTN, 1.0', 'USD, 20.0', 'GBP, 12.0']})

# 循环处理每个需要拆分的列
for col in df.columns:
    if ',' in col:
        df = splitDropCols(col, df)

print(df)

输出结果与你的预期完全一致:

City Country Currency   POP
0  Thimphu   Bhutan      BTN   1.0
1       NY     USA      USD  20.0
2    London      UK      GBP  12.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:29