使用 dropna() 选择子集以选择多列

dvb*_*vb9 6 python pandas

我有以下数据帧:

df = pd.DataFrame([[1,2,3,3],[10,20,2,],[10,2,5,],[1,3],[2]],columns = ['a','b','c','d'])
Run Code Online (Sandbox Code Playgroud)

从这个 DataFrame 中,我想删除子集 ['b', 'c', 'd'] 中所有值都是 NA 的行,这意味着应该删除最后一行。

以下代码有效:

df.dropna(subset=['b', 'c', 'd'], how = 'all')
Run Code Online (Sandbox Code Playgroud)

但是,考虑到我将使用更大的数据框,我想使用范围 ['b':'d'] 选择相同的子集。我如何选择这个子集?

cs9*_*s95 6

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
Run Code Online (Sandbox Code Playgroud)

  • 缺少一个冒号,否则您将得到一个没有列的系列: c = df.loc[:0, 'b':'d'].columns (3认同)