我有一个带有大量NaN的大数据框,我想将其存储到一个较小的数据框中,该数据框存储所有索引以及非NaN,非零值的值。
dff = pd.DataFrame(np.random.randn(4,3), columns=list('ABC'))
dff.iloc[0:2,0] = np.nan
dff.iloc[2,2] = np.nan
dff.iloc[1:4,1] = 0
数据帧可能如下所示:
A B C
0 NaN -2.268882 0.337074
1 NaN 0.000000 1.340350
2 -1.526945 0.000000 NaN
3 -1.223816 0.000000 -2.185926
我想要一个数据框如下所示:
0 B -2.268882
0 C 0.337074
1 C 1.340350
2 A -1.526945
3 A -1.223816
4 C -2.185926
我有一个相对较大的数据框架,成千上万个...我该如何快速做到这一点?
非常感谢!
最佳答案
将0
替换为np.nan
,并将.stack()
替换为(see docs)。
如果有可能在np.nan
之后的rows
中具有所有.replace()
值,则可以在.dropna(how='all')
之前执行.stack()
以减少要旋转的行数。如果这可能适用于columns
,请执行.dropna(how ='all',axis = 1)。
df.replace(0, np.nan).stack()
0 B -2.268882
C 0.337074
1 C 1.340350
2 A -1.526945
3 A -1.223816
C -2.185926
根据需要与
.reset_index()
结合。要从带有
Series
的MultiIndex
中进行选择,请使用.loc[(level_0, level_1)]
:df.loc[(0, 'B')] = -2.268882
docs中有关切片等的详细信息。
关于python - 如何从DataFrame获取非NaN元素的索引和值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37211689/