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

Pandas DataFrame:从现有列移除最后一个词创建新列

解决Pandas提取地名(移除末尾"County")的正确方法

方法一:拆分后切片再拼接

这是最直观的处理方式,先拆分字符串为列表,去掉最后一个元素后再拼接成字符串:

places['name_split'] = places['PLACENAME'].str.split().str[:-1].str.join(' ')

你之前的方法2出错,是因为直接对str.split()返回的Series做[:-1]——这是对整个Series的行进行切片,而非对每个单元格内的列表元素做切片。加上.str前缀后,才会对每个列表单独执行切片操作。

方法二:从右侧单次分割取前半部分

针对明确最后一个词是"County"的场景,用rsplit从右侧只分割一次,效率更高:

places['name_split'] = places['PLACENAME'].str.rsplit(' ', 1).str[0]

你之前的方法3触发ValueError,是因为直接用[0]取的是整个Series的第一个元素,而非每个单元格内分割后的第一部分,必须用.str[0]实现逐元素提取。

方法三:正则替换末尾的"County"

如果所有目标地名都是以" County"结尾,用正则替换一步到位:

places['name_split'] = places['PLACENAME'].str.replace(r' County$', '', regex=True)

r' County$'精准匹配字符串末尾的空格加"County",替换为空即可完成移除。

补充说明你之前的其他错误

  • 方法4里的x['PLACENAME'].str.split()[:-1]是对Series的行做切片,取前n-1行的数据,而非每个列表的前n-1个元素,自然无法用' '.join()拼接;
  • 自定义函数触发TypeError,大概率是没对Series用.apply()调用函数,正确写法应为places['name_split'] = places['PLACENAME'].apply(processField),但上面的内置方法比自定义函数更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:37:34