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

Pandas str.split报错:传递项数不符,求Entry列拆分解决方案

解决Pandas拆分「数字+文本」列的报错问题

你遇到的报错核心原因是列赋值的语法错误:你用了df['number','name']这种写法,Pandas会把它当成一个MultiIndex列名,而不是同时创建两个独立的列,正确的写法应该是用双层方括号df[['number', 'name']]。下面给你两种可靠的解决方案:

方案1:按空格拆分(适合数字后仅单个空格分隔的场景)

你之前用split(" ",n=1,expand=True)的逻辑是对的,只是赋值语法有误。修正后的代码如下:

import pandas as pd

# 拆分Entry列为两列,赋值给新的number和name列
df[['number', 'name']] = df['Entry'].str.split(" ", n=1, expand=True)
# 可选但推荐:把number列转换为数值类型
df['number'] = pd.to_numeric(df['number'])

执行后就能得到包含Date、number、name的三列DataFrame。

方案2:正则提取(更健壮,适合数字与名字间多空格的场景)

如果Entry列中数字和名字之间可能存在多个空格,或者你想更精准地匹配开头的连续数字,用str.extract会更可靠,它可以直接提取正则分组的内容:

import pandas as pd

# 正则匹配开头的连续数字,以及后续所有文本
df[['number', 'name']] = df['Entry'].str.extract(r'^(\d+)\s+(.*)$', expand=True)
# 转换number列类型
df['number'] = pd.to_numeric(df['number'])

这个正则的含义:

  • ^(\d+):匹配字符串开头的1个或多个数字,作为第一个分组(对应number列)
  • \s+:匹配一个或多个空格作为分隔符
  • (.*)$:匹配剩余的所有文本直到结尾,作为第二个分组(对应name列)

为什么你之前的写法会报错?

  • 第一种用split('([0-9])',n=1,expand=True):这个正则会把单个数字单独拆分出来,比如"6 John Smith"会被拆成['', '6', ' John Smith'],得到3个元素,但你试图赋值给2个列,因此触发Wrong number of items passed 3的错误。
  • 第二种用split(" ",n=1,expand=True):拆分结果是2个元素,但你用了df['number','name']的赋值方式,Pandas认为你要给一个名为('number','name')的单列赋值,而非两个独立列,因此触发Wrong number of items passed 2的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:22:36