下面是我可复制的例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'x' : [np.NaN, np.array([0,2])], 'y' : [np.array([3,2]),np.NaN], 'z' : [np.array([4,5]),np.NaN], 't' : [np.array([3,4]),np.array([4,5])]})
我想计算除NaN
外的每一行的均值数组我已经尝试了df.mean(axis=1)
,它为两行提供了NaN。这对我来说特别令人惊讶,因为df.sum(axis=1)
似乎像我预期的那样工作。
[df.loc[i,:].mean() for i in df.index]
确实有效,但我相信有一个更直接的解决方案。
另一个可能的解决方案:
df.apply(lambda x: np.mean(x[x.notnull()]), axis=1)
输出:
0 [3.3333333333333335, 3.6666666666666665]
1 [2.0, 3.5]
dtype: object
您的DataFrame使用object
dtype,这总是有点笨拙。它比本机类型慢,并且并不总是按照您期望的方式运行。
因为Pandas删除了"panel"类型,我建议您不要将此数据存储在DataFrame中。相反,将其存储在3D NumPy数组中,然后您可以使用np.nanmean()
轻松计算平均值,同时忽略NaN。