【问题标题】:Collecting Duplicate Column names from multiple DataFrames Python从多个 DataFrames Python 中收集重复的列名
【发布时间】:2019-04-27 09:06:57
【问题描述】:

基本上我正在尝试创建一个列表,以便我可以将我的数据框合并到重复的列名上。以下是我目前的设置方式。

sheets = [df1, df2, df3, df4]
col_list = []
dup_list = []

for i in sheets:
    col_list.append(i.columns.values)
    for c in col_list:
        if c.duplicated():
            dup_list.append(c)

我收到以下错误

AttributeError: 'numpy.ndarray' 对象没有属性'duplicated'

我知道没有复制的方法。获取所有数据框中出现的重复列名的最佳方法是什么。

非常感谢任何帮助。

【问题讨论】:

    标签: python pandas merge data-modeling


    【解决方案1】:

    我相信您需要 set.intersection 并将所有列名称映射到 sets:

    df1 = pd.DataFrame(columns=list('acbd'))
    df2 = pd.DataFrame(columns=list('abde'))
    df3 = pd.DataFrame(columns=list('cbad'))
    df4 = pd.DataFrame(columns=list('acbf'))
    
    sheets = [df1, df2, df3, df4]
    L = [x.columns for x in sheets]
    #less readable
    #L = [x for x in sheets]
    dup_list  = list(set.intersection(*map(set,L)))
    print (dup_list)
    ['a', 'b']
    

    【讨论】:

    • 嗨@Jezrael,这很有帮助,谢谢。但是它返回一个空列表
    • @Paul - 嗯,尝试仅测试 2-3 个 DataFrame,在我看来,真实数据中不存在所有 sheetnames 相同的列 :( 或者可能有一些空格?可能见 L = [x.columns for x in sheets] @ 987654326@?
    • 那么如果测试L = [x.columns[x.columns.isin(['PAY REFERENCE', 'NAME'])] for x in sheets] print (L) 是什么?
    • @Paul - 在我看来,如果以后需要使用没有标题的 DataFrame,仍然有必要设置它们 - 例如由df4.columns = ['cola1','col2',...] 手动操作。然后更好的是使用concatmerge - 使用dfs = [x.set_index(dup_list) for x in sheets]df = pd.concat(dfs, axis=1).reset_index()
    • @jezreal,谢谢,我会调查一下
    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2016-08-14
    • 2015-10-20
    • 2016-11-01
    • 2013-09-05
    • 2021-03-16
    • 2016-11-23
    • 2018-11-24
    相关资源
    最近更新 更多