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

Pandas报错‘Columns must be same length as key’的排查求助

解决Pandas报错“Columns must be same length as key”

报错核心原因

这个错误的本质是:你试图将拆分后的数据赋值给['btts_x_1', 'btts_x_2']这类双列,但btts_x或btts_y列中存在部分单元格,用\n拆分后得到的元素数量不是2。常见情况包括:

  • 单元格内容没有换行符,拆分后仅1个元素
  • 单元格是空字符串/空值,拆分后得到空列表
  • 单元格包含多个换行符,拆分后得到3个及以上元素

排查与解决步骤

1. 定位问题数据

先找出哪些行的内容不符合预期格式:

# 检查btts_x列拆分后的元素数量
frame['split_len_x'] = frame['btts_x'].apply(lambda x: len(x.split('\n')))
# 打印拆分长度不等于2的行内容
print(frame[frame['split_len_x'] != 2]['btts_x'])

# 对btts_y列做同样检查
frame['split_len_y'] = frame['btts_y'].apply(lambda x: len(x.split('\n')))
print(frame[frame['split_len_y'] != 2]['btts_y'])

通过这段代码能直接定位到格式异常的单元格。

2. 修复异常数据

根据定位结果选择处理方式:

  • 过滤无效行:如果这些异常行是无效数据,直接删除:
frame = frame[frame['btts_x'].apply(lambda x: len(x.split('\n')) == 2)]
frame = frame[frame['btts_y'].apply(lambda x: len(x.split('\n')) == 2)]
  • 补全异常值:需要保留行的话,拆分后不足2个元素的补空值,多余的只取前2个:
def safe_split(x):
    parts = x.split('\n')
    # 截取前2个元素,不足的补None
    return parts[:2] + [None]*(2 - len(parts[:2]))

frame[['btts_x_1', 'btts_x_2']] = frame['btts_x'].apply(safe_split).apply(pd.Series).astype(float)
frame[['btts_y_1', 'btts_y_2']] = frame['btts_y'].apply(safe_split).apply(pd.Series).astype(float)

3. 优化代码写法(更简洁高效)

用Pandas原生的str.split方法,指定expand=True直接生成多列,n=1确保只拆分成2部分,自动处理拆分后列数不足的情况:

frame[['btts_x_1', 'btts_x_2']] = frame['btts_x'].str.split('\n', expand=True, n=1).astype(float)
frame[['btts_y_1', 'btts_y_2']] = frame['btts_y'].str.split('\n', expand=True, n=1).astype(float)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:45:38