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

Pandas处理Floor列提取首层数据出错,求问题原因解析

问题分析与修正

原始数据

0    Ground out of 2
1         1 out of 3
2         1 out of 3
Name: Floor, dtype: object

错误原因

你的代码存在三个核心问题:

  1. 语法错误:lower_floors = ['Ground','Basement]中'Basement'缺少闭合引号,实际运行会触发语法报错(你给出的输出可能是输入时的笔误)。
  2. 变量名不一致:定义了first_floor = [],但追加元素时用的是floor_location.append(),这会导致floor_location未定义的报错。
  3. 循环逻辑错误:
    • 内层循环没有break:当匹配到Ground时,你追加了'0',但内层循环会继续遍历Basement,之后触发与内层for绑定的else块,再次追加data[:2](即Gr),导致单条数据被处理两次,结果多了一个冗余元素。
    • else缩进错误:原代码的else属于内层for循环,而非外层的条件判断,无论是否匹配到底层关键词,只要内层循环正常结束,都会执行else块的追加操作。

修正后的代码

方案1:修复循环逻辑

first_floor = []
lower_floors = ['Ground', 'Basement']  # 修正引号

for data in df.Floor:
    matched = False
    for keyword in lower_floors:
        if keyword in data:
            first_floor.append('0')
            matched = True
            break  # 匹配到后立即跳出内层循环,避免重复处理
    if not matched:
        # 若需要保留空格,可替换成 first_floor.append(data[:2])
        first_floor.append(data.split()[0])

方案2:用正则简化逻辑(更健壮)

import re

first_floor = []
lower_floors = ['Ground', 'Basement']
num_pattern = re.compile(r'\d+')

for data in df.Floor:
    if any(keyword in data for keyword in lower_floors):
        first_floor.append('0')
    else:
        # 提取字符串中的第一个数字
        match = num_pattern.search(data)
        if match:
            first_floor.append(match.group())

修正后结果

运行上述代码会得到你期望的结果:['0', '1', '1'](如果需要保留空格,方案1中改用first_floor.append(data[:2])即可得到['0', '1 ', '1 '])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:09:33