python - 如何从 DataFrame 中获取非 NaN 元素的索引和值

标签 python python-2.7 numpy pandas dataframe

我有一个包含大量 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)

如果您有可能在 .replace() 之后的 rows 中拥有所有 np.nan 值,您可以执行 .stack() 之前添加 .dropna(how='all') 以减少要旋转的行数。如果这适用于,请执行`.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() 组合。

要从具有 MultiIndexSeries 中进行选择,请使用 .loc[(level_0, level_1)]:

df.loc[(0, 'B')] = -2.268882

有关切片等的详细信息,请参见 docs .

关于python - 如何从 DataFrame 中获取非 NaN 元素的索引和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211689/

相关文章:

python - 使用 Python 从多个文件名中删除句点

python - 为什么使用 "colon and comma"进行切片与使用索引集合进行切片不同

python - 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

python - 这个异步 aiohttp 代码有什么问题?

python - VS Code Python 调试器无法连接到正在运行的进程(超时)

python - Python Properties类的Json序列化

python - 类型错误不可散列类型 :set

python - 在 numpy 形状参数中使用元组

python - 以编程方式添加和删除 tkinter python 标签会导致 IndexError : list index out of range

python - 广播到 Numpy 数组的 View 中