Python-数据框包含需要删除的列名

时间:2018-08-01 21:46:28

标签: python pandas dataframe

我有两个数据框:

第一个数据帧只是一个列,其中每一行是第二个数据帧中的列名。该数据框仅包含所有列的子集。

我想做的是删除第二个数据框中较小的一列中引用的列。我编写了一个执行此操作的循环,但是我想知道是否有更有效的方法,因为我需要删除大约5,000列。

这是我完成此任务的代码:

for i in to_remove['column_name']:
    df = df.drop(i, axis=1)

谢谢!

3 个答案:

答案 0 :(得分:1)

看看这个例子:

df = pd.DataFrame({'cols': ['col1', 'col2']})
df2 = pd.DataFrame({'col1': ['a', 'b'], 
                    'col2': ['a', 'b'], 
                    'col3': ['a', 'b'], 
                    'col4': ['a', 'b']})

如此

>>> df
    cols
0   col1
1   col2

>>> df2
    col1    col2    col3    col4
0   a       a       a       a
1   b       b       b       b

选项1:isin + ~

您可以使用isin +一元监督者~

df2.loc[:, ~df2.columns.isin(df.cols)]

    col3    col4
0   a       a
1   b       b

选项2:drop + axis=1

df2.drop(df.cols, axis=1) # same as df2.drop(columns=df.cols)

    col3    col4
0   a       a
1   b       b

这些命令返回一个新的df。因此,不要忘记将结果分配回变量(例如df2 = df2.drop(df.cols, axis=1)

答案 1 :(得分:0)

我可能会误解您在寻找什么,但是以下方法应该可以工作:

df_new = df.drop(columns=to_remove['column_name'])

答案 2 :(得分:0)

这应该做到:

df.drop(to_remove.column_name, axis=1, inplace=True)