资讯动态

Pandas实战:从Excel到报告的房地产数据分析全流程

发布时间:2026/9/15 23:47:18 来源:尧图企业网站定制
1. 数据从哪来先解决房地产数据的读取问题做房地产市场分析卡住大多数人的第一关往往不是分析思路而是数据根本读不进来。我在帮朋友处理杭州某板块二手房数据时深有体会——销售团队从房产平台后台导出了一份Excel表格两万多条挂牌记录又在企业微信里传来传去到我手上已经变成了一个三年前的.xlsx文件里面还有两个Sheet一个叫挂牌数据一个叫成交记录Sheet名中间还带了个全角空格。这个场景太典型了。现实中的房地产数据基本不会像教科书里的iris鸢尾花数据集那样干净整洁所以第一步反而是最考验细节的。pandas中读取数据主要用两个函数pd.read_excel()和pd.read_csv()。前者需要额外安装openpyxl或xlrd引擎后者需要留意编码参数。import pandas as pd # 读取Excel文件指定Sheet名跳过前两行杂项说明 df pd.read_excel( 杭州二手房挂牌_2025Q1.xlsx, sheet_name挂牌数据, skiprows2, engineopenpyxl ) # 读取CSV文件遇到中文乱码时调整编码 df_csv pd.read_csv(成交记录.csv, encodingutf-8-sig)读进来之后不要急着分析先把数据大卸八块看一遍结构。我习惯用三行代码快速确认print(df.shape) # 多少行多少列 print(df.columns) # 字段名 print(df.dtypes) # 每列数据类型这两万条数据21个字段里面的类型问题立刻就暴露了——总价是字符串面积也是字符串后面带着㎡这种单位。这要是直接去做计算pandas不会报错但结果会非常离谱。这个阶段还经常碰到一个隐蔽问题报表工具导出的Excel里空单元格不一定是NaN有可能是空字符串甚至是字符串null。你别觉得夸张我见过不止一次——某租房平台的导出文件里缺失的朝向字段填的就是四个字母的null字符串。提示读取数据后务必先用df.head()和df.info()看一遍。df.info()会输出每列的非空值数量和类型是判断数据质量的起点。类型全对但非空值数量明显偏少的列就要标记为后续清洗重点。如果不想依赖本地的Excel文件不少公开渠道也提供可直接下载的数据集。比如一些城市的数据开放平台会公布商品房成交统计安居客、贝壳找房等平台的公开页面可以爬取注意遵守robots协议和数据使用规范GitHub上也有整理好的历史房价数据集。我个人经验是先拿本地Excel练手等read_excel这类基础操作完全熟练了再考虑爬虫抓数据否则很容易混淆是数据的问题还是是代码的问题。2. 清洗才是重头戏房地产数据最常见的几种脏数据数据分析圈有句话叫80%的时间花在数据清洗上放在房地产数据上一点不夸张。这个行业的数据脏得非常有特色下面几种情况我基本每次都会遇到。2.1 类型转换字符串数字混杂单位房产平台为了前端展示方便导出的数据经常是给人看的格式而不是给程序算的格式。总价列里存的是345万面积列里存的是89.5㎡单价列有时干脆就是空着要你自己算。这种数据必须先清洗再使用。# 去掉单位、转成数值 df[总价_万] df[总价].str.replace(万, , regexFalse).astype(float) df[面积_平米] df[面积].str.replace(㎡, , regexFalse).astype(float) # 计算单价单位元/平米 df[单价_元每平米] df[总价_万] * 10000 / df[面积_平米]这里用到的正则替换看起来很基础但有两个坑。第一个坑是regexFalse参数没有加。str.replace默认是正则匹配模式如果不加regexFalse遇到字符串里包含正则特殊字符的情况就会出问题第二个坑是转换前要先检查有没有空值如果某一行的 总价 是NaNstr.replace会返回NaNastype(float)也能接受但后续计算时NaN会静默传播最后算出来的结果可能全是NaN。所以清洗顺序应该是先统一缺失值再做类型转换。2.2 缺失值处理填空还是删除取决于业务含义pd.NA是pandas 1.0之后引入的缺失值标记比之前的np.nan更智能的地方在于它能够保持数据类型。举个例子楼层这一列如果存整数用np.nan填空会把整列类型从int64强制变成float64而用pd.NA则不会。处理缺失值没有万能的配方核心是搞明白这个字段为什么缺失。成交价为空房子还没成交这个数据缺失是正常的做挂牌分析时不用管它做成交分析时直接dropna。朝向为空挂牌信息不完整可以暂时保留或者用该小区同户型的众数填充。挂牌时间为空这类数据缺失就比较严重时间序列分析时这个字段是核心缺失超过5%就要考虑是否放弃该列。# 查看每列缺失值数量 print(df.isna().sum()) # 删除成交价完全缺失的行做成交价分析时 df_sold df.dropna(subset[成交价_万]) # 用众数填充朝向 df[朝向] df[朝向].fillna(df[朝向].mode()[0])2.3 重复记录与异常值一个数据决定了你整篇报告的结论重复数据在房地产场景里非常普遍原因很现实同一个房源挂牌三次或者平台在不同时间段抓了多次快照。如果直接用df.drop_duplicates()可能会把同一套房不同时期的价格变化这个信息也删掉。# 先看哪些列组合能唯一标识一条记录 # 一般情况下小区名楼栋号房号面积可以用来判断是否同一套房 df_dup df[df.duplicated(subset[小区, 楼栋, 房号, 面积_平米], keepFalse)] print(df_dup.shape)对于挂牌记录我通常按小区楼栋房号分组保留挂牌时间最新的那条同时把历史的挂牌价单独存一个表用来分析业主调价行为。这样处理既不丢信息又保证了主表数据的唯一性。异常值更刺激。我处理过一份数据某个老破小小区面积列清一色五十多平米结果突然冒出来一条5000多平米的挂牌——后来查了一下是录入人员把小区总建筑面积填到单套房源里了。这种异常值如果不处理算出来的小区均价会直接起飞报告发出去就是事故。处理异常值的思路不是直接删而是先把可疑数据筛出来人肉确认一遍。# 用分位数检测面积超过99.5%分位数的记录 q99 df[面积_平米].quantile(0.995) df_abnormal df[df[面积_平米] q99] print(df_abnormal[[小区, 楼栋, 房号, 面积_平米]])如果确认是录入错误直接删除如果只是极端大户型比如别墅、连排就单独归类不要和普通住宅混在一起计算均价。这一步别偷懒宁可多花十分钟人工看一遍也不要让一个异常数据毁掉整篇分析。3. 核心分析场景从数据能看到指标能算数据清洗干净之后才开始真正有意思的部分。房地产数据分析不外乎几个核心问题哪个区域涨得最快、什么总价段的房子最受欢迎、库存周期是变长还是变短、成交量是否支撑当前价格。这些问题落到pandas里其实就是几种操作的组合groupby聚合、sort_values排序、merge关联以及pivot_table透视。3.1 区域价格排名与分布第一步永远是看大局。杭州的二手房市场向来是冰火两重天核心城区和远郊的价差能到三四倍。用groupby按城区分组计算挂牌均价、中位数和挂牌量能快速建立基本面认知。# 按城区统计 region_stats df.groupby(城区).agg( 挂牌量(房源ID, count), 均价(单价_元每平米, mean), 中位数单价(单价_元每平米, median), 平均面积(面积_平米, mean) ).reset_index() region_stats region_stats.sort_values(均价, ascendingFalse) print(region_stats)注意这里我用的是单价_元每平米而不是总价。房地产分析里总价受面积影响太大两个不同面积的样本直接平均总价没有意义单价才是可比口径。同时我特意同时计算了mean和median——如果两者差距很大说明该区域存在明显的价格断层比如极少数高端盘把均价拉高了这时候中位数更能反映普通人的体感。3.2 不同总价段的供需结构分析房地产调控里有个词叫供应结构落到数据上就是不同总价段的套数分布。刚需盘集中在200-300万改善盘在400-600万豪宅在1000万以上。分析总价段分布可以判断一个城市或者一个板块的主力客群到底是谁。# 设置总价分组区间 bins [0, 150, 300, 500, 800, 10000] labels [0-150万, 150-300万, 300-500万, 500-800万, 800万以上] df[总价分段] pd.cut(df[总价_万], binsbins, labelslabels) # 交叉表城区 × 总价分段看各区域产品结构 price_region pd.crosstab(df[城区], df[总价分段]) print(price_region) # 计算每个城区的主力总价段 main_segment df.groupby([城区, 总价分段]).size().reset_index(name数量) main_segment main_segment.loc[main_segment.groupby(城区)[数量].idxmax()] print(main_segment)pd.cut和pd.qcut是分析连续变量分段最常用的两个函数。区别在于cut按你指定的数值边界切分qcut按分位数切分每段样本数量大致相等。做总价段分析用cut更合适因为边界是业务含义决定的比如300万是很多城市的刚需线做价格分层排序时用qcut更合适。3.3 面积与总价的相关性面积和总价自然是强相关的但这个相关性在不同市场环境下会变。在一线城市面积和总价的相关性相对较弱因为地段溢价占比高一套30平米的老破小和一套50平米的远大新可能总价差不多而在三四线城市面积几乎决定了总价因为地段差异不大。用pandas计算相关性只是一行代码的事关键在于怎么解读。# 相关系数矩阵 corr df[[面积_平米, 总价_万, 单价_元每平米]].corr() print(corr) # 分城区看面积与总价的相关性 for region in df[城区].unique(): sub df[df[城区] region] r sub[面积_平米].corr(sub[总价_万]) print(f{region}: 面积与总价相关系数 r {r:.3f})我实际跑过杭州的数据临安区面积和总价的相关系数在0.85以上而西湖区大概0.7左右。这个差值说明什么临安的房产是面积驱动型买多大面积花多少钱很透明西湖区有大量的学区属性溢价面积只是影响价格的因素之一。这个结论如果单独看临安的数据很容易忽略但分城区计算之后趋势就很明显了——这就是聚合维度的价值。4. 时间维度从静态切片到动态趋势前面做的都是某个时点的截面分析但房地产市场最值钱的信息其实藏在时间序列里。价格指数、成交量变化、去化周期这些概念本质上都是时间序列分析。pandas处理时间序列的能力非常强一套组合拳下来基本不需要其他库。4.1 日期解析与按时间聚合房产平台导出的时间字段格式那叫一个五花八门2025-03-15 14:22:31、2025/3/15、3月15日还有可能2025-03-15 14:22:31 UTC8这种带时区后缀的。pd.to_datetime能处理大部分情况但遇到多格式混用时会比较头疼。# 统一转换时间格式errorscoerce 让无法解析的变成 NaT df[挂牌日期] pd.to_datetime(df[挂牌时间], errorscoerce) # 检查哪些日期解析失败了 failed df[df[挂牌日期].isna()][挂牌时间] print(failed.unique())errorscoerce这个参数很关键。如果不加遇到无法解析的格式整个to_datetime会直接抛异常程序当场崩掉加了它pandas会把解析不了的变成NaT等效于时间戳里的NaN然后你再单独处理这些失败样本比如手动写映射函数。日期解析成功后最常用的操作是按时间重采样。房地产分析师关心的是月度走势但原始数据是逐条记录必须聚合到月度粒度。# 按月份统计挂牌量 df.set_index(挂牌日期, inplaceTrue) monthly_listing df[房源ID].resample(M).count() print(monthly_listing) # 按季度统计成交均价 sold_df df.dropna(subset[成交价_万]) quarterly_price sold_df[单价_元每平米].resample(QE).mean() print(quarterly_price)resample(M)里的 M 表示按月分组QE 表示按季度末分组。注意不同版本的pandas对ME和M的偏好不同新版本推荐使用MEMonth End老版本兼容 M 写法实际使用看你的pandas版本决定。建议直接运行一下pd.__version__确认版本如果是2.2以上就用ME。4.2 移动平均抹平短周期波动房地产数据的月度波动很大春节月份挂牌量暴跌年末为了冲业绩成交量猛增这些季节性波动会掩盖真实的趋势。移动平均是抹平短期波动的经典方法。我用12个月移动平均来分析长期趋势——有一次去地产公司汇报对方的分析师问你这数据噪音怎么这么小其实就是rolling的功劳。# 计算单价12个月移动平均 monthly_price df[单价_元每平米].resample(ME).mean() ma12 monthly_price.rolling(window12).mean() # 绘制对比图 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.figure(figsize(12, 5)) plt.plot(monthly_price.index, monthly_price, label月度均价, alpha0.7) plt.plot(ma12.index, ma12, label12个月移动平均, linewidth2) plt.legend() plt.title(二手房月度挂牌均价走势) plt.show()rolling(window12)的含义是对当前月及其前11个月的数据求均值生成的新序列每个点都代表过去一年的平均水平。这比只看单月数据能更好地判断趋势到底有没有起来—单月上涨可能是偶然或者季节性移动平均上涨才是真上涨。4.3 同比环比消除季节因素的利器环比的坑在于季节性。每年3月小阳春成交量都会上升你要是直接跟2月比得出暴涨50%的结论就是典型的被季节效应带偏。房地产分析的正确做法是双管齐下既看环比短期态势也看同比消除季节因素后的真实变化。# 环比本月与上月相比 monthly_qoq monthly_listing.pct_change() print(环比变化率最近6个月:) print(monthly_qoq.tail(6)) # 同比本月与去年同期相比 monthly_yoy monthly_listing.pct_change(periods12) print(同比变化率最近6个月:) print(monthly_yoy.tail(6))pct_change(periods12)表示与12期之前比较也就是去年同期。如果你的数据从2022年到2025年跨度超过三年才有足够的同比窗口。数据不满一年的情况下不要硬算同比环比加移动平均也能说明问题。时间序列这部分如果要做更复杂的分析比如季节性分解、趋势预测我建议引入statsmodels库它提供了STL和SARIMAX等经典方法。但基本的月度监控pandas自带的resample、rolling、pct_change三板斧完全够用。5. 从Excel到报告构建一个完整的数据分析流水线很多初学者最大的困惑是这些操作都会但拿到一份真实数据时不知道先干什么后干什么。简单来说一个完整的数据分析流程可以有明确的结构数据读取 → 数据清洗 → 特征工程 → 分析计算 → 可视化呈现 → 导出报告。用pandas可以把这个流程固定成一个可复用脚本以后换城市、换时间窗口只要改路径和参数就能跑。5.1 特征工程构造分析需要的派生字段特征工程这个说法听起来高大上但落到房地产分析里主要是构造以下这些列单价总价/面积最基础的分析指标总价分段用pd.cut分箱用于交叉分析房龄当前年份减去建筑年代可以分析次新房和老公房的价格差异挂牌天数当前时间减去挂牌日期反映房源是不是被市场冷落楼层分类低楼层/中楼层/高楼层/顶复用条件赋值处理import datetime current_date pd.Timestamp(2025-06-01) # 假设分析截止日 df[房龄] current_date.year - df[建筑年代] def classify_floor(value): if value 1: return 低楼层 elif value 6: return 中楼层 elif value 30: return 高楼层 else: return 超高层 df[楼层分类] df[楼层数].apply(classify_floor) df[挂牌天数] (current_date - df[挂牌日期]).dt.daysapply是pandas里用途最广的函数之一可以逐行处理数据。但注意如果性能到瓶颈apply运行速度会非常慢可以考虑用np.select或者map提速大数据量时区别会非常明显。几万条数据用apply没问题但如果你拿到了几十万条甚至上百万条就要留意了。5.2 多种分析结果的合并与导出分析到后面会产生多张中间表区域统计表、月度趋势表、总价段交叉表、楼盘排行表。这些表格最终要汇总到一张Excel报告里最方便的做法是把每个结果单独写到一个Sheet用pd.ExcelWriter一把梭。output_path 房产分析报告_2025年6月.xlsx with pd.ExcelWriter(output_path, engineopenpyxl) as writer: region_stats.to_excel(writer, sheet_name区域价格对比, indexFalse) price_region.to_excel(writer, sheet_name城区产品结构) monthly_price.to_frame().to_excel(writer, sheet_name月度均价走势) price_region.to_excel(writer, sheet_name总价段分布)ExcelWriter 的上下文管理器写法能保证文件写入完整避免中途报错导致文件损坏。导出这一步看起来没什么技术含量却是团队协作里最容易出问题的环节——同事打不开文件、字段对不上、小数位数不对。我建议导出前统一设置数值格式pd.set_option(display.float_format, {:,.2f}.format)这个设置不仅影响 DataFrame 输出到屏幕的显示对部分导出场景也有作用。如果环境不一样没生效也可以在to_excel前先对数值列做一遍round(2)这样导出的表一定是两位小数不会出现那种让人抓狂的一长串浮点小数。5.3 与可视化、机器学习库的衔接pandas本身不追求图表功能实际做报告时通常会配合matplotlib/seaborn做模型预测时配合scikit-learn。以下是我常用的衔接方式箱线图观察价格分布用seaborn.boxplot分城区画单价分布一眼就能看出哪个区域内部差异大哪里存在明显离群点。散点图看面积与总价关系用matplotlib.scatter每个点代表一套房颜色标注城区能直观看到不同城区的斜率差异。线性回归预测价格scikit-learn的LinearRegression把面积、房龄、城区one-hot编码作为特征训练一个简单的价格模型。虽然精度有限但对判断挂牌价有没有虚高很有参考价值。from sklearn.linear_model import LinearRegression from sklearn.preprocessing import OneHotEncoder # 选择特征面积、房龄、城区 features df[[面积_平米, 房龄, 城区]].copy() features pd.get_dummies(features, columns[城区], drop_firstTrue) features features.fillna(features.median()) X features.values y df[单价_元每平米].fillna(df[单价_元每平米].median()).values model LinearRegression() model.fit(X, y) # 计算残差实际值 - 预测值残差大的可能是虚高房源 df[预测单价] model.predict(X) df[残差] df[单价_元每平米] - df[预测单价]残差分析是房地产数据分析里特别实用的一招。比如某套房子的实际挂牌单价是5.5万但模型根据面积、房龄、城区预测应该是4.8万残差为7000元说明这套房要么有特殊附加值学区、景观、装修要么就是卖家虚高挂牌。结合这个排序列表我可以对挂牌房源做一个性价比排行这个分析结果在团队讨论里反馈一直很好。6. 实操复盘基于热搜词整理的高频踩坑点写到这里再来回顾一下开头提到的热搜词。pycharm怎么安装pandas包、attributeerror: module pandas has no attribute core、jupyter安装pandas、pandas基本操作切片索引——这些热搜词背后其实是真实用户被卡住的具体场景。我基于这些高频问题做一个实操复盘把我踩过或者见过别人踩的坑集中列出。6.1 安装类问题pycharm和jupyter环境里装不上pandas怎么办无论你用的是PyCharm还是Jupyter Notebook安装pandas的本质都一样——在Python环境中用pip或conda安装包。问题通常出在你当前解释器环境和你以为的环境不是同一个。最常见的场景PyCharm里新建了一个项目但项目解释器用的不是系统Python而是PyCharm自动创建的虚拟环境venv。你在命令行里pip install pandas装到了系统Python里PyCharm项目用的却是虚拟环境当然import pandas报ModuleNotFoundError。正确做法是在PyCharm的File Settings Project Python Interpreter里点加号搜索pandas直接安装。Jupyter Notebook用户则要注意Notebook默认使用的内核Kernel对应的Python环境和终端默认的Python可能不是同一个。如果你在终端里装好了pandas但Notebook里import失败大概率是内核指向了不同的虚拟环境。可以用一条命令强制安装import sys print(sys.executable)在Notebook里执行这行代码它会输出当前内核对应的Python解释器完整路径。然后打开终端用这个解释器的pip安装/path/to/your/python -m pip install pandas用python -m pip install而不是直接pip install这是一个能避免80%环境问题的好习惯——它保证了你安装到的环境就是当前这个解释器所在的环境。6.2 AttributeError: module pandas has no attribute core这个报错我在Stack Overflow上刷到过很多次也在自己电脑上遇到过。最典型的背景是用户先安装了一个叫pandas的第三方包然后又安装了真正的 pandas两个包的名字冲突导致import pandas时加载了错误的模块。排查方式分三步走检查pandas.__file__指向的路径确认加载的是哪个目录下的pandas。在虚拟环境里重新安装python -m pip uninstall pandas再python -m pip install pandas --upgrade。如果还不行用pip list查看有没有同名的劣质包直接卸载。还有另一种情况是版本太老。pandas 0.x 和 1.x 的API差异很大比如df.append()这个函数在2.0版本被移除了Series.append和DataFrame.append都已经弃用。如果你的代码是基于老教程写的在新版本里会收到AttributeError。排查思路不是怀疑代码错了而是先确认版本兼容性。用pd.__version__看看自己是哪个版本然后对照官方文档确认API是否还存在。6.3 数据类型的隐式转换陷阱df[总价]这一列如果你往里塞了一个字符串整个列会被强制转换为object类型后续所有数值运算都会出问题。我在2.1节说过先转换类型这里再补充一个更隐蔽的场景一列数据看起来全是数字但中间混进了一个Unknown字符串astype(float)直接报错。应对方案是用pd.to_numeric配合errorscoerce参数转换无法解析的值变成NaN再统计到底是哪些值异常df[总价_万] pd.to_numeric(df[总价].str.replace(万, , regexFalse), errorscoerce) # 找出无法解析的记录 unparsed df[df[总价_万].isna()] print(unparsed[总价].unique())看打印出来的unique()结果你会发现异常数据的本来面目是各式各样的——有时是暂无报价有时是面谈有时就是单纯录入了错别字。根据实际内容决定是填充还是剔除。6.4 拆分合并不当导致的数据对不齐处理房产数据时经常需要同时操作多个表房源表、小区表、成交记录表、经纪人表。merge和concat的误用会导致索引错位这种错误看起来没有问题但结果却不对。pandas的merge相当于SQL里的JOIN通过指定的key列关联两张表concat相当于SQL里的UNION把两张表纵向堆叠。使用merge时最容易踩的坑是一次关联出很多行——如果key在左表里重复右表的数据就会被复制多份。比如房源表和成交记录表关联时同一套房源有多条成交记录历史上成交过两次关联后房源信息会重复出现两行统计挂牌量时会虚高。遇到这种情况先检查关联列是否有重复值# 检查key是否有重复 print(df[房源ID].duplicated().sum())如果 key 有重复先想清楚业务逻辑是保留一条还是允许一对多。房地产数据里同一套房源多次挂牌是常态这不算脏数据但你在做关联分析时必须清楚这一点否则把重复行当成多套房子来统计数字会错得离谱。6.5 数据量超出内存的应对思路虽然本文的例子都是几万条的小数据集但很多读者做的是全国范围的分析动辄几百万条。pandas处理这种量级会吃力但远没到要做大数据的程度。几个实用的降内存操作读取时指定用到的列pd.read_csv(..., usecols[城区, 总价, 面积])避免把无关大字段读进来。把object类型转成category类型尤其是城区朝向这种枚举值少的列能大幅降低内存占用。如果数据文件过大用chunksize参数分块读取逐块处理后再汇总。df pd.read_excel( 全国房产数据.xlsx, usecols[城区, 总价, 面积, 挂牌日期], dtype{城区: category} )这个dtype参数很实用它能在读取阶段就指定列的类型避免pandas先按object读一遍再转换省去大量中间内存。对几千万行的数据源来说读取阶段就把类型定好效果立竿见影。7. 一个完整的实操案例从零分析一份二手房数据理论讲了不少最后用一个端到端的案例把前面所有知识点串起来。假设我拿到了一份杭州市某平台的二手房挂牌数据字段包括小区名称、城区、户型、面积、总价、朝向、楼层数、建筑年代、挂牌时间共18420条记录。我的目标是输出一份市场周报包含区域价格对比、涨价最快的小区、各总价段占比、月度挂牌趋势四块内容。第一步数据读取和初步检查。我直接用了2.1节的方法确认类型和缺失情况。第二步数据清洗。总价列去万面积列去㎡建筑年代为空的行我保留了房龄缺失不影响区域聚合分析朝向列用众数填充删除完全重复的挂牌记录。第三步特征工程。新增单价、房龄、总价分段三个字段同时用日期解析算出挂牌天数。第四步分析计算。上午干活先把区域统计跑出来有了均价中位数不等于平均数的认知然后找出各区域挂牌均价环比涨幅最大的前五个小区再用pd.crosstab生成城区和总价段的交叉矩阵最后按月resample统计新挂牌数量并计算同比增幅。第五步撰写报告。用ExcelWriter把所有结果写到一个Excel文件里不同Sheet放不同分析主题数值统一保留两位小数。这五步走完一份市场周报的数据基础就具备了。整个过程如果数据清洗顺利两三个小时内能完成。我第一次做的时候因为不熟悉清洗流程花了整整两天大部分时间都花在处理各种意外上比如面积列里混入了个赠送啊啊这种乱码文本还有挂牌日期里出现了2025年03月(发布日期)这种带括号的字符串。现在回想这类问题的根源都在于——真实数据从来不是为程序准备的是为人眼准备的。pandas的价值恰恰体现在这里它给了你一套系统处理人眼友好但机器不友好数据的工具链。最后再分享一个我自己的小习惯每次分析完都会把过程中用到的清洗和建模代码整理成一个函数库统一封装成data_utils.py。下次分析另一个城市的数据时改一下字段映射就能复用 80% 的清洗逻辑。这个习惯让我的效率在一个月内提升了一倍以上。做数据分析工作花时间积累自己的工具库是投资回报率最高的事情。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价