如何从Pandas DataFrame移除超出范围的非NaN数据
解决方法
1. 安全修改数据(消除警告)
直接用布尔索引修改DataFrame时触发的警告,是因为你可能在操作原数据的切片副本。改用loc可以精准定位并修改原数据,避免警告:
# 将PM2.5列中超过150的值设为0 df2.loc[df2["PM2.5 particulate matter (Hourly measured)"] > 150, "PM2.5 particulate matter (Hourly measured)"] = 0
如果不想改动原数据,建议先创建副本再处理,不影响后续分析:
df2_clean = df2.copy() df2_clean.loc[df2_clean["PM2.5 particulate matter (Hourly measured)"] > 150, "PM2.5 particulate matter (Hourly measured)"] = 0 # 绘图时替换成df2_clean即可 ax.bar(df1["Pressure (hPa)"].loc["2019"], df2_clean["PM2.5 particulate matter (Hourly measured)"].loc["2019"], alpha=0.2, color="Green")
2. 不修改数据,直接截断柱子
如果不想碰原始数据,给柱状图加上clip_on=True,再设置y轴范围,超出部分会被自动隐藏:
fig, ax = plt.subplots() # 绘制时添加clip_on=True参数 ax.bar(df1["Pressure (hPa)"].loc["2019"], df2["PM10 particulate matter (Hourly measured)"].loc["2019"], alpha=0.2, clip_on=True) ax.bar(df1["Pressure (hPa)"].loc["2019"], df2["PM2.5 particulate matter (Hourly measured)"].loc["2019"], alpha=0.2, color="Green", clip_on=True) ax.set_xlim(970,1045) # 设置y轴上限为150,超出部分会被裁剪 ax.set_ylim(0, 150)
3. 直接删除异常数据行
如果这个超出范围的值是无效数据,直接删掉对应行更彻底:
# 筛选出PM2.5≤150的行,生成清理后的副本 df2_clean = df2[df2["PM2.5 particulate matter (Hourly measured)"] <= 150] # 同步清理df1,保证两个DataFrame索引对齐 df1_clean = df1.loc[df2_clean.index] # 用清理后的数据集绘图 ax.bar(df1_clean["Pressure (hPa)"].loc["2019"], df2_clean["PM2.5 particulate matter (Hourly measured)"].loc["2019"], alpha=0.2, color="Green")
内容的提问来源于stack exchange,提问作者Elirbs
相关产品推荐
相关产品推荐

