In [25]: df
Out[25]:
city latitude longitude a b
0 aaa 11.1111 NaN 1 2
1 bbb NaN 22.2222 5 6
2 NaN NaN NaN 3 4
3 NaN 11.1111 33.3330 1 2
4 NaN NaN 44.4440 1 1
In [26]: df.query("city == city or (latitude == latitude and longitude == longitude)")
Out[26]:
city latitude longitude a b
0 aaa 11.1111 NaN 1 2
1 bbb NaN 22.2222 5 6
3 NaN 11.1111 33.3330 1 2
In [62]: df.dropna(subset=['city','latitude','longitude'], how='all')
Out[62]:
city latitude longitude a b
0 aaa 11.1111 NaN 1 2
1 bbb NaN 22.2222 5 6
3 NaN 11.1111 33.3330 1 2
4 NaN NaN 44.4440 1 1 # this row should be dropped...
## get the data
df = pd.read_clipboard()
## remove undesired rows
df.dropna(axis=0, subset=[['city', 'longitude', 'latitude']], thresh=2)
这将产生:
In [5]: df.dropna(axis=0, subset=[['city', 'longitude', 'latitude']], thresh=2)
Out[5]:
city latitude longitude a b
0 aaa 11.1111 NaN 1 2
1 bbb NaN 22.2222 5 6
3 NaN 11.1111 33.3330 1 2
dropna有一个参数,用于仅对列的子集应用测试:
试试这个:
如果我正确理解OP,那么索引为
4
的行必须删除,因为不是两个坐标都不为空。因此dropna()
在这种情况下不会“正常”工作:您可以使用
pd.dropna
,但不使用how='all'
和subset=[]
,您可以使用thresh
参数在删除行之前要求行中的NAs最少数量。在城市中,long/lat示例中,thresh=2
将起作用,因为我们只在3个NAs的情况下下降。使用MaxU建立的伟大数据示例,我们可以这将产生:
相关问题 更多 >
编程相关推荐