Pandas选取两列重采样后.mean()仅返回一列的问题排查
问题排查与解决:Pandas重采样.mean()丢失列
这个问题我之前也碰到过,大概率是visibility列的数值有效性或者数据类型出了问题,导致聚合后整列结果全为NaN,被Pandas默认自动丢弃了。咱们一步步来排查和解决:
第一步:排查核心原因
先确认visibility列的关键状态,比如数据类型、缺失值数量,是否存在非数值内容:
# 检查数据类型 print("visibility列数据类型:", temp_2011_clean['visibility'].dtype) # 统计缺失值总数 print("visibility列缺失值数量:", temp_2011_clean['visibility'].isna().sum()) # 如果是object类型,检查是否存在非数值字符串 if temp_2011_clean['visibility'].dtype == 'object': non_numeric = temp_2011_clean['visibility'].loc[~temp_2011_clean['visibility'].str.replace('.', '').str.isdigit()] print("非数值内容示例:", non_numeric.head())
常见触发问题的两种情况:
- 数据类型错误:
visibility列是object类型(比如存储为带格式的字符串),无法直接计算均值 - 缺失值占比过高:该列大部分值是NaN,重采样聚合后整列结果全为NaN,Pandas默认会丢弃这类无有效结果的列
第二步:针对性解决
情况1:数据类型为object(字符串)
先将列转换为数值型,无法转换的内容强制转为NaN(后续可按需处理缺失值):
import pandas as pd temp_2011_clean['visibility'] = pd.to_numeric(temp_2011_clean['visibility'], errors='coerce')
情况2:缺失值过多但需要保留列
如果确实有大量缺失值,但希望即使结果为NaN也保留列,可以用两种方式处理:
方式A:显式指定每列的聚合规则
这种方式会强制保留你指定的列,哪怕结果全是NaN:
temp_2011_clean[['visibility', 'dry_bulb_faren']].resample('W').agg({ 'visibility': 'mean', 'dry_bulb_faren': 'mean' }).head()
方式B:关闭均值计算的跳过缺失值设置(慎用)
设置skipna=False后,只要列中有任何NaN,整列的均值结果会变成NaN,但列会被保留:
temp_2011_clean[['visibility', 'dry_bulb_faren']].resample('W').mean(skipna=False).head()
第三步:验证修复结果
处理完成后,重新运行重采样聚合代码,就能看到visibility列被正常保留了:
temp_2011_clean[['visibility', 'dry_bulb_faren']].resample('W').mean().head()
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

