根据其他列值删除包含NaN的行

时间:2017-09-19 19:18:04

标签: python pandas dataframe nan

使用任何空值删除所有行没有问题,但我只希望某些行以空值删除并保留其他行

例如:

index  city      lo        hi
 0    Chicago    nan      75
 1    Boston     nan      nan
 2    New York   54       89
 3    Miami      nan      nan
 4    Seattle    49       nan

请注意,我的行数多于5行。因此,df.dropna(axis=0, how='any')只会留下2 New York 54 89

但是,如果我只想让芝加哥和迈阿密掉队呢?如何在列' city'?上设置该条件?所以我最终得到:

index   city     lo        hi
 1    Boston     nan      nan
 2    New York   54       89
 4    Seattle    49       nan

1 个答案:

答案 0 :(得分:2)

使用isin查找特定城市的所有行,然后沿第一个轴使用isnull,并删除原始数据框中这些行中包含空值的所有行。

cities = ['Miami', 'Boston']
idx = df[df.city.isin(['Boston', 'Miami'])].isnull().any(1).index    
df = df.loc[df.index.difference(idx)]

print(df)
   index      city    lo    hi
0      0   Chicago   NaN  75.0
2      2  New York  54.0  89.0
4      4   Seattle  49.0   NaN

index.difference将返回df.index中不在idx内的所有索引值。