我有一个 pandas DataFrame,df
,我想仅使用前 100K 行来获取从第 180 列到末尾(不包括最后一列)的平均值。
如果我使用整个 DataFrame:
df.mean().isnull().any()
我得到错误
如果我只使用前 100K 行:
train_means = df.iloc[:100000, 180:-1].mean()
train_means.isnull().any()
我得到:正确
我不确定这是如何可能的,因为第二种方法只是获取完整 DataFrame 的子集的列平均值。因此,如果完整 DataFrame 中没有列的平均值为 NaN
,我不知道完整 DataFrame 子集中的列会如何。
无论如何,我跑了:
df.columns[df.isna().all()].tolist()
我得到:[]
。因此,我认为我没有任何列的每个条目都是 NaN
(这会导致我的 train_means
计算中出现 NaN
)。
知道我做错了什么吗?
谢谢!
最佳答案
尝试看看
(df.iloc[:100000, 180:-1].isnull().sum()==100000).any()
如果返回 True
,这意味着前 100000 行中的列值全部为 NaN
现在让我们解释一下为什么在对整个数据帧执行 mean
时会得到所有 notnull
,因为 mean
有 skipna
默认为True
,因此它会在mean
之前删除NaN
关于python - Pandas:计算按列平均值会产生空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54994361/