按名称删除显示在多个pandas数据框中的列

时间:2017-01-07 22:17:17

标签: python pandas dataframe

假设我有多个数据帧,每个数据帧都有相同的列名,尽管这些列的内容不一定相同。

我尝试遍历每个数据帧的列并按名称删除列,但这不起作用。如果我在每个数据帧上单独尝试相同的方法,它就可以工作

我有以下数据框:

import pandas as pd
df1 = pd.DataFrame({'user': ['John', 'Joe', 'Alice'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})
df2 = pd.DataFrame({'user': ['Luke', 'Paul', 'Jane'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})

df3 = pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})

我试过这个,没有成功:

dataframes = [df1, df2, df3]
for df in dataframes:
    for column in df.columns:
        if "Unnamed" in column:
            df = df.drop(column, axis = 1)

这并没有改变dataframes中的任何项目。

但是,如果我说:

df3 = df3.drop("Unnamed: 0", axis = 1)

它返回:

pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
                   'income': [40000, 50000, 42000]})

注意,这也适用于df1和df2,而不仅仅是df3。

任何人都可以帮助从列表中的所有数据框中删除不需要的列,而无需为每个数据框写一行吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

for df in dataframes:
    for column in df.columns:
        if "Unnamed" in column:
            df.drop(column, axis = 1, inplace=True)

问题是您正在创建新的数据框,并将它们分配给立即丢弃的df