【问题标题】:Drop columns by name that appear in multiple pandas dataframes按名称删除多个熊猫数据框中出现的列
【发布时间】:2017-05-22 11:39:08
【问题描述】:

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

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

我有以下数据框:

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。

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 我认为我们可以摆脱第二个(嵌套)循环:for df in dataframes: df.drop(df.columns[df.columns.str.contains('Unnamed:')], 1, inplace=True)
    • @tato 完美!因此,inplace=True 隐式返回 df 以代替 dataframes 中的每个对应项
    • 不完全是,@berrypy,inplace=True 正在修改 df 在每次循环迭代中指向的 DataFrame 对象(即原始数据帧),而不是创建一个新的
    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2020-01-04
    • 2021-10-05
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多