一个简单的例子应该很明显。示例数据:
df = pd.DataFrame( np.random.randn(2,6), columns=['x','y','xy','yx','xx','yy'] )
现在,我只想列出包含“x”的列的值。这里有几种方法:
df[[ x for x in df.columns if 'x' in x ]]
Out[53]:
x xy yx xx
0 2.089078 1.111139 -0.218800 1.025810
1 -0.343189 0.274676 -0.342798 -0.503809
df[ df.columns[pd.Series(df.columns).str.contains('x')] ]
Out[54]:
x xy yx xx
0 2.089078 1.111139 -0.218800 1.025810
1 -0.343189 0.274676 -0.342798 -0.503809
后一种方法看起来很有前途,但它真的很难看,而且到目前为止我还没有找到缩短它的方法。更像这样的东西会很棒:
df[ columns_with( df, 'x' ) ]
事实上,我用一个函数做了类似的事情,但我想知道是否有一种无需用户编写的函数或 monkeypatch 就可以做到这一点的绝妙方法?
对于动机/背景,当您有一个包含很多列的不熟悉的数据集,或者即使您有一个熟悉的数据集但不能记住数百个变量中的一个的确切名称时,这种事情非常有用。对于我需要此功能的情况,我经常会在数据探索阶段一遍又一遍地执行此操作,因此对我来说,拥有一种快速而简单的方法来执行此操作真的很值得。
请您参考如下方法:
你可以使用 DataFrame.filter使用 like 参数:
>>> df.filter(like="x")
x xy yx xx
0 -1.467867 0.766077 1.210667 1.116529
1 -0.041965 0.546325 -0.590660 1.037151
like 参数表示“保留信息轴,其中 arg in col == True”。
