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

Pandas拆分商品重量列遇"Columns must be same length"报错求解

问题解析与解决方案

错误原因

你用str.rsplit("\d{3}g", n=1, expand=True)的思路完全错了:

  • \d{3}g是你要提取的重量内容,不是拆分的分隔符,用它做拆分的话,拆分后会直接丢掉重量值,还会把商品名切成两部分(如果匹配到的话)。
  • 一旦数据集中存在不匹配\d{3}g模式的行(比如重量是两位数、或者格式异常),拆分结果只会返回1列,和你要赋值的2列数量不匹配,直接触发Columns must be same length as key报错。

正确拆分方法(适配10万行大数据)

因为重量都是以数字+g结尾,不管前面有没有空格,用正则提取是最高效的方案,推荐两种实现方式:

方式一:一次性拆分商品名和重量

用str.extract配合正则,直接从原字符串中拆分出两部分:

import pandas as pd

# 针对你的数据集执行以下代码
df_transactions[['PROD_NAME', 'Weight']] = df_transactions['PROD_NAME'].str.extract(r'^(.*?)(\d+g)$', expand=True)
# 清理商品名末尾可能残留的空格
df_transactions['PROD_NAME'] = df_transactions['PROD_NAME'].str.strip()

正则说明:

  • ^(.*?):非贪婪匹配开头到重量前的所有内容(自动适配有无空格的情况)
  • (\d+g)$:匹配字符串末尾的数字+g格式的重量

方式二:先提取重量,再清理商品名

如果觉得一次性拆分不够直观,可以分两步操作:

# 第一步:提取末尾的重量列
df_transactions['Weight'] = df_transactions['PROD_NAME'].str.extract(r'(\d+g)$', expand=True)
# 第二步:从原商品名中移除重量部分并清理空格
df_transactions['PROD_NAME'] = df_transactions['PROD_NAME'].str.replace(r'\d+g$', '', regex=True).str.strip()

边界情况适配

如果数据中存在其他格式的重量(比如两位数重量、大写G),可以把正则调整为(\d+[gG])$,覆盖更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:30:14