Python - 如果两列为 NaN,则删除行

标签 python pandas dataframe

这是对 this question 的扩展,其中 OP 想知道如何删除单列中值为 NaN 的行。

我想知道如何删除2(或更多)列中的值为两者 NaN 的行。使用第二个答案创建的数据框:

In [1]: df = pd.DataFrame(np.random.randn(10,3))

In [2]: df.ix[::2,0] = np.nan; df.ix[::4,1] = np.nan; df.ix[::3,2] = np.nan;

In [3]: df
Out[3]:
          0         1         2
0       NaN       NaN       NaN
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

如果我使用 drop.na() 命令,特别是 drop.na(subset=[1,2]),那么它会完成一个“或”输入 drop and leaves:

In[4]: df.dropna(subset=[1,2])
Out[4]: 
          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
5 -1.250970  0.030561 -2.678622
7  0.049896 -0.308003  0.823295

我想要的是“and”类型的删除,它删除列索引 1 2 中有 NaN 的行。这将留下:

          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

只有第一行被删除。

有什么想法吗?

编辑:更改数据框值以保持一致性

最佳答案

以下两项中的任何一项:

df.dropna(subset=[1, 2], how='all')

df.dropna(subset=[1, 2], thresh=1)

关于Python - 如果两列为 NaN,则删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128856/

相关文章:

Python Requests Invalid URL Label 错误

python - Pycharm 退出代码 0

python - "No driver name specified"将 pandas 数据框写入 SQL Server 表

python - 当单元格中的值是列表时,Pandas 数据框条件

python - 根据条件将 Pandas DataFrame 中的一行替换为 'NaN'

Python - 时间序列对齐和 "to date"函数

python - 如何用python将方形图像像素化为256个大像素?

python - 使用 Pyspark 将密集向量转换为数据帧

python - 如何在大数据文件中使用 pandas 删除重复的行?

python - Pandas - 逗号分隔行中的每个字符串在数据框中出现的频率