我有以下DataFrame:
df = pd.DataFrame([[1,2,3,3],[10,20,2,],[10,2,5,],[1,3],[2]],columns = ['a','b','c','d'])
从这个DataFrame中,我想删除子集['b','c','d']中的所有值都是NA的行,这意味着应删除最后一行。
以下代码有效:
df.dropna(subset=['b', 'c', 'd'], how = 'all')
然而,考虑到我将使用更大的数据帧,我想使用范围['b':'d']选择相同的子集。如何选择此子集?
答案 0 :(得分:4)
IIUC,使用loc
,检索这些列,并将其传递给dropna
。
c = df.loc[0, 'b':'d'].columns # retrieve only the 0th row for efficiency
df = df.dropna(subset=c, how='all')
print(df)
a b c d
0 1 2.0 3.0 3.0
1 10 20.0 2.0 NaN
2 10 2.0 5.0 NaN
3 1 3.0 NaN NaN
答案 1 :(得分:3)
与@ayhan's idea类似 - 使用df.columns.slice_indexer:
In [25]: cols = df.columns[df.columns.slice_indexer('b','d')]
In [26]: cols
Out[26]: Index(['b', 'c', 'd'], dtype='object')
In [27]: df.dropna(subset=cols, how='all')
Out[27]:
a b c d
0 1 2.0 3.0 3.0
1 10 20.0 2.0 NaN
2 10 2.0 5.0 NaN
3 1 3.0 NaN NaN
答案 2 :(得分:0)
您还可以按数字方式对列列表进行切片:
c = df.columns[1:4]
df = df.dropna(subset=c, how='all')
如果使用数字不切实际(即无法计数),则存在一些麻烦的解决方法:
start, stop = df.columns.get_loc('b'), df.columns.get_loc('d')
c = df.columns[start:stop+1]
df = df.dropna(subset=c, how='all')