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

房地产数据清洗:如何基于Furbished列字符串长度更新Gross_area列?

解决方案

问题核心错误

你之前的代码有两个关键问题:

  • 直接用len(df['Furbished'])是计算整个Series的元素总数,不是每个字符串的长度,必须用Pandas的str.len()方法实现逐元素长度计算。
  • 逻辑判断语法错误:第二个代码里的or 'No'不符合Pandas布尔数组的判断规则,同时代码存在引号、括号未闭合的低级语法问题。

基于字符串长度的修正方案

针对你要求的按Furbished列字符串长度定位目标值的需求,提供两种可行写法:

写法1:兼容带/不带空格的面积格式

考虑到示例里190 m2(长度6)和190m2(长度5)都是有效面积值,设置长度范围匹配:

import pandas as pd
import numpy as np

# 替换为你的数据框变量
df['Gross_area'] = np.where(
    df['Furbished'].str.len().between(5, 6),  # 匹配长度5或6的字符串
    df['Furbished'],
    df['Gross_area'].str.replace(r' #.*', '', regex=True)  # 清理原列的注释内容
)

写法2:长度+关键词双重匹配(更鲁棒)

如果要避免误判其他长度相近的非面积值,可以同时匹配m2关键词:

df['Gross_area'] = np.where(
    (df['Furbished'].str.len().between(5, 6)) & df['Furbished'].str.contains('m2'),
    df['Furbished'],
    df['Gross_area'].str.replace(r' #.*', '', regex=True)
)

额外补充

  • 代码里的str.replace(r' #.*', '', regex=True)是用来清理原Gross_area列中的#erroneous/#correct注释,把170 #erroneous这类值转为干净的170,完全匹配你期望的结果格式。
  • 注意修正原代码的语法细节:比如df['Furbished]要补全引号为df['Furbished'],np.where调用末尾要闭合括号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:05:54