选择列中具有特定值的行,并在熊猫数据框中包含具有NaN的行

时间:2020-02-12 21:33:06

标签: python pandas

我有一个DataFrame df,看起来像这样:

df
   a         b         c
0  0.557894 -0.196294 -0.020490
1  1.138774 -0.699224       NaN
2       NaN  2.384483  0.554292
3 -0.069319       NaN  1.162941
4  1.040089 -0.271777       NaN
5 -0.337374       NaN -0.771888
6 -1.813278 -1.564666       NaN
7       NaN       NaN       NaN
8  0.737413       NaN  0.679575
9 -2.345448  2.443669 -1.409422

我想选择值超过某个值的行,通常我会使用以下行:

new_df = df[df['c'] >= .5]

但这将返回:

          a         b         c
2       NaN  2.384483  0.554292
3 -0.069319       NaN  1.162941
5 -0.337374       NaN  0.771888
8  0.737413       NaN  0.679575

我想获得这些行,但还要将具有nan值的行保留在列'c'中。我一直找不到要问同一件事的问题,他们通常会要求一个或另一个,但不能同时问两个。由于我知道具体的值,因此可以对要删除的行进行硬编码,但是我想知道是否有更好的解决方案。最终结果应如下所示:

   a         b         c
1  1.138774 -0.699224       NaN
2       NaN  2.384483  0.554292
3 -0.069319       NaN  1.162941
4  1.040089 -0.271777       NaN
6 -1.813278 -1.564666       NaN
7       NaN       NaN       NaN
8  0.737413       NaN  0.679575

仅删除行0,5和9,因为它们在列'c'中小于.5

2 个答案:

答案 0 :(得分:1)

您应该使用| (或)运算符。

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [0.557894,1.138774,np.nan,-0.069319,1.040089,-0.337374,-1.813278,np.nan,0.737413,-2.345448],
                   'b': [-0.196294,-0.699224,2.384483,np.nan,-0.271777,np.nan,-1.564666,np.nan,np.nan,2.443669],
                   'c': [-0.020490,np.nan,0.554292,1.162941,np.nan,-0.771888,np.nan,np.nan,0.679575,-1.409422]})

df = df[(df['c'] >= .5) | (df['c'].isnull())]
print(df)

输出:

           a            b          c
1   1.138774    -0.699224        NaN
2        NaN     2.384483   0.554292
3  -0.069319          NaN   1.162941
4   1.040089    -0.271777        NaN
6  -1.813278    -1.564666        NaN
7   NaN               NaN        NaN
8   0.737413          NaN   0.679575

答案 1 :(得分:0)

您应该能够做到

new_df = df[df['c'] >=5 or df['c'] == 'NaN']
相关问题