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
相关产品推荐
相关产品推荐

