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
相关产品推荐
相关产品推荐

