Python 基于列名删除列

Python 基于列名删除列,python,pandas,Python,Pandas,全部 假设有一个带有一些列名的df,在我的例子中,名称是数值。例如,名为1000、1001等的列。我需要删除所有未通过某个筛选测试的列—在我的示例中,所有名称小于某个值的列。让我们说不到1500 我知道如何直接做到这一点(通过列出每一列),或者通过在循环中调用drop,但这似乎效率很低。我在表达它时遇到语法上的困难 我试过这样的方法: df.drop(df.columns[x for x in df.columns.values<str(1500)], axis=1)) df.drop(

全部

假设有一个带有一些列名的df,在我的例子中,名称是数值。例如,名为1000、1001等的列。我需要删除所有未通过某个筛选测试的列—在我的示例中,所有名称小于某个值的列。让我们说不到1500

我知道如何直接做到这一点(通过列出每一列),或者通过在循环中调用drop,但这似乎效率很低。我在表达它时遇到语法上的困难

我试过这样的方法:

df.drop(df.columns[x for x in df.columns.values<str(1500)], axis=1))

df.drop(df.columns[x代表df.columns.values中的x首先构建要删除的列的列表(循环遍历列,查看它们是否符合条件),然后立即删除该列表中的所有列。

考虑列名为0到99的数据帧

    0   1   2   3   4   5   6   7   8   9   ... 90  91  92  93  94  95  96  97  98  99
0   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
如果要将列名减少30

df = df.drop((x for x in df.columns.tolist() if x < 30), axis = 1)
如果列的类型为object,请首先使用

df.columns = df.columns.astype(np.int64)

我认为最简单的方法是创建布尔掩码,然后使用loc选择:

df = pd.DataFrame(columns=range(10), index=[0]);
print (df)
     0    1    2    3    4    5    6    7    8    9
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

#inverting boolean mask with ~
print (df.loc[:, ~(df.columns < 8)])
     8    9
0  NaN  NaN

print (df.columns >= 8)
[False False False False False False False False  True  True]

print (df.loc[:, df.columns >= 8])
     8    9
0  NaN  NaN

我可以这样做,但我想知道是否有一个内联选项。类似这样的东西:df.drop(df.columns[x代表范围内的x(10001499)],axis=1)
df.columns = df.columns.astype(np.int64)
df = pd.DataFrame(columns=range(10), index=[0]);
print (df)
     0    1    2    3    4    5    6    7    8    9
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

#inverting boolean mask with ~
print (df.loc[:, ~(df.columns < 8)])
     8    9
0  NaN  NaN

print (df.columns >= 8)
[False False False False False False False False  True  True]

print (df.loc[:, df.columns >= 8])
     8    9
0  NaN  NaN
print (df.columns[df.columns < 8])
Int64Index([0, 1, 2, 3, 4, 5, 6, 7], dtype='int64')


print (df.drop(df.columns[df.columns < 8], axis=1))

     8    9
0  NaN  NaN