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