房地产数据清洗:如何基于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
相关产品推荐
相关产品推荐

