繁体   English   中英

熊猫仅在具有至少1个非NaN值的行上

[英]Pandas fillna only on rows with at least 1 non-NaN value

假设我有一个像这样构造的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame(data = {"col1":[3, np.nan, np.nan, 21],
                          "col2":[4, np.nan, 12, np.nan],
                          "col3":[33, np.nan, 55, np.nan]})

看起来像这样:

    col1     col2     col3
0   3.0      4.0      33.0
1   NaN      NaN      NaN
2   NaN      12.0     55.0
3   21.0     NaN      NaN

我想过滤到具有至少1个非NaN值的列 ,然后到位。

如果我执行以下操作:

df.loc[df.dropna(thresh=1).index, :].fillna("fill value")

这将创建一个新的DataFrame,其值已正确填充,并删除了全为NaN的行。

但是我想保留所有NaN行,因此我尝试将其应用到位:

df.loc[df.dropna(thresh=1).index, :].fillna("fill value", inplace=True)

但没有对原始DataFrame进行任何更改-我在做什么错?

为了澄清,您想让所有NaN行都保留为nans,但用值填充其他NaN? 到位吗?

这样的事情应该起作用:

df.where(df.isnull().all(axis=1), df.fillna(100), inplace=True)

where将整个行为null的值保留在其中,否则,将其替换为df.fillna()值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM