按名称删除出现在多个 Pandas 数据框中的列

spi*_*006 0 python dataframe pandas

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

我试图遍历每个数据框的列并按名称删除列,但这不起作用。如果我分别在每个数据帧上尝试相同的方法,它就会起作用

我有以下数据框:

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]})
Run Code Online (Sandbox Code Playgroud)

我试过这个,没有成功:

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

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

但是,如果我说:

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

它返回:

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

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

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

tat*_*ato 6

尝试这个:

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

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

  • 我认为我们可以摆脱第二个(嵌套)循环:`for df in dataframes: df.drop(df.columns[df.columns.str.contains('Unnamed:')], 1, inplace=True)` (4认同)