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

如何从Pandas DataFrame的proj列拆分内容更新testID列?

解决Pandas中修改testID列的问题

我来帮你搞定这个问题!你遇到的报错主要是对Pandas Series的字符串操作逻辑理解有偏差,咱们一步步拆解修正:

先分析你遇到的错误原因

  • 第一个错误AttributeError: 'Series' object has no attribute 'split':Pandas的Series对象没有直接的split()方法,必须用Pandas提供的字符串处理API,也就是str.split()来对Series中的每个元素执行分割操作。
  • 第二个错误TypeError: can only concatenate list (not "str") to list:df['proj'].str.split('_')[1]这种写法是错误的——str.split('_')返回的是一个元素为列表的Series,你直接加[1]是在取整个Series的第2个元素(行),而不是每个列表里的第2个元素。要提取每个分割后列表的中间部分,应该用str[1]来对Series中的每个列表做索引。
  • 还有一个隐藏问题:你的testID是int类型,直接和字符串拼接会报错,必须先把它转换成字符串类型。

正确的解决方案

方法1:使用str.split()配合str[1]提取中间部分

这是最直接的方式,先分割字符串,再提取每个分割结果的第2个元素(索引从0开始,中间部分就是索引1),最后和转成字符串的testID拼接:

df['testID'] = df['proj'].str.split('_').str[1] + '-' + df['testID'].astype(str)

方法2:使用str.extract()正则提取(更简洁)

因为你的proj是固定的三部分下划线分隔格式,用正则表达式直接提取中间部分会更直观:

df['testID'] = df['proj'].str.extract(r'_(\w+)_')[0] + '-' + df['testID'].astype(str)

这里正则_(\w+)_的意思是匹配被下划线包裹的字母数字序列,也就是中间的部分,extract()会把匹配到的内容提取成新的Series。

验证示例

假设你的DataFrame初始是这样:

testIDproj
23bob_xp_sam
45alice_qa_bob

运行上面的代码后,testID列会变成:

testID
xp-23
qa-45

完全符合你想要的格式!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:49