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

如何在Pandas DataFrame中提取列部分内容生成新列并解决报错

解决Pandas提取字符串前2字符生成新列的问题

嘿,我来帮你搞定这个问题!你的需求是从列a里提取前2个字符作为新列d,但之前的代码写法出了问题,咱们一步步来解决。

先说说你代码出错的原因

你遇到的错误:

TypeError: ("split() missing 1 required positional argument: 'self'", 'occurred at index 0')

这个错误主要有两个原因:

  1. 你错误地直接调用pd.Series.str.split——这个方法是要在具体的Series对象上使用的,不能直接这么调用,而且你还写错了DataFrame的名字(df1t应该是df1吧?);
  2. 更关键的是,split是用来分割字符串的工具,根本不是用来提取前N个字符的,用它完全搞错方向啦。

给你几个简单高效的正确方法

Pandas里处理这种字符串提取,尽量别用apply逐行处理,向量化操作才是最优解,速度快还简洁:

方法1:直接用字符串切片(最推荐)

如果你的列a已经是字符串类型,直接用str[:2]就能提取每个元素的前2个字符:

df1['d'] = df1['a'].str[:2]

方法2:如果列a是数值类型(比如整数)

如果a列存的是整数,那得先转成字符串再切片,不然像0987这种带前导零的数值会被当成987,提取前两位就错了:

df1['d'] = df1['a'].astype(str).str[:2]

方法3:非要用apply的正确写法(不推荐)

如果你坚持想用apply,那得在lambda里正确处理每一行的a值:

df1['d'] = df1.apply(lambda row: str(row['a'])[:2], axis=1)

但还是那句话,这种逐行处理的方式性能远不如前两种向量化操作,能不用就不用。

运行后的结果

用上面的正确代码处理后,你的DataFrame就会变成你想要的样子:

a     b     c    d
0  1234  4567  7890  12
1  0987  7654  4321  09
2  0708  7080  9080  07

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:11