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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:24:53