ely*_*ely 6 python numpy missing-data pandas
假设我有一个pandas.DataFrame
叫df
.df
表示不同个体和索引轴的列表示时间,因此(i,j)条目是对时间段i的单独j观察,并且我们可以假设所有数据都是float
可能具有NaN
值的类型.
就我而言,我有大约14,000列和几百行.
pandas.corr
将给我回到14,000×14,000相关矩阵,它的时间性能对我的应用程序来说很好.
但我还想知道,对于每对个体(j_1,j_2),有多少非空观察进入相关计算,因此我可以隔离数据覆盖率较差的相关单元.
我能想出的最好成绩如下:
not_null_locations = pandas.notnull(df).values.astype(int)
common_obs = pandas.DataFrame(not_null_locations.T.dot(not_null_locations),
columns=df.columns, index=df.columns)
Run Code Online (Sandbox Code Playgroud)
内存占用和速度开始有点问题.
有没有更快的方法来获得共同观察pandas
?
你可以这样做,但需要进行cythonize(否则会慢得多);然而内存占用应该更好(这给出了 nan 观察值的数量,您给出了有效观察值的数量,但很容易转换)
l = len(df.columns)
results = np.zeros((l,l))
mask = pd.isnull(df)
for i, ac in enumerate(df):
for j, bc in enumerate(df):
results[j,i] = (mask[i] & mask[j]).sum()
results = DataFrame(results,index=df.columns,columns=df.columns)
Run Code Online (Sandbox Code Playgroud)