Python处理DataFrame地址列:含floor时截断保留,否则不变
问题场景
现有包含address列的DataFrame如下:
address xxx City yyy road 17 number 8 floor west bank ttt City iii road 1 number ggg City kkk road 25 number 1 floor apple store
需求
- 当
address字段包含floor时,截断至floor前的内容并补充floor - 不包含
floor的行,保持原内容不变
当前代码问题
原代码df['address'] = df.address.str.split('floor').str[0]+'floor'会给所有行强行追加floor,导致原本不含floor的行也被修改,不符合需求。
解决方案
方法一:条件判断处理
利用numpy.where结合字符串包含判断,仅对含floor的行做修改:
import numpy as np import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'address': [ 'xxx City yyy road 17 number 8 floor west bank', 'ttt City iii road 1 number', 'ggg City kkk road 25 number 1 floor apple store' ] }) # 执行处理逻辑 df['address'] = np.where( df['address'].str.contains('floor'), df['address'].str.split('floor').str[0].str.strip() + 'floor', df['address'] )
str.strip()用于清理截断后末尾的多余空格,保证格式整洁。
方法二:正则替换(更简洁)
用正则表达式匹配并保留到floor为止的内容,不匹配的行自动保留原样:
df['address'] = df['address'].str.replace(r'(.*floor).*', r'\1', regex=True)
正则说明:(.*floor)匹配从开头到第一个floor的所有内容(包含floor),.*匹配后续所有字符,替换时仅保留分组内的内容。
处理后结果
address xxx City yyy road 17 number 8 floor ttt City iii road 1 number ggg City kkk road 25 number 1 floor
内容的提问来源于stack exchange,提问作者Lara19
相关产品推荐
相关产品推荐

