【问题标题】:Adding attribute "keys" to concatenated dataframes将属性“键”添加到连接的数据帧
【发布时间】:2019-05-01 07:54:23
【问题描述】:

我沿轴 = 1(列)连接两个数据框,并尝试使用“键”以便稍后能够区分两个数据框的同名列。

df1 = pd.DataFrame({'tl': ['x1', 'x2', 'x3', 'x4'],
            'ff': ['y1', 'y2', 'y3', 'y4'],
            'dd': ['z1', 'z2', 'z3', 'z4']},
            index=[2016-01-01, 2016-01-02, 2016-01-03, 2016-01-04])

df2 = pd.DataFrame({'tl': ['x1', 'x2', 'x3', 'x4'],
            'ff': ['y1', 'y2', 'y3', 'y4'],
            'rf': ['z1', 'z2', 'z3', 'z4']},
            index=[2016-01-01, 2016-01-02, 2016-01-03, 2016-01-04])

data = pd.concat([df1, df2],keys=['snow','wind'], axis=1, ignore_index=True)

但是,当尝试打印属于@YashTD 在Pandas add keys while concatenating dataframes at column level 中建议的键之一的所有列时

print(comb_data.snow.tl)

我收到以下错误消息:

AttributeError: 'DataFrame' object has no attribute 'snow'

我认为,键只是没有被添加到数据框中,但我不知道为什么。他们也没有出现在他们应该建议的地方打印数据帧 head() Pandas add keys while concatenating dataframes at column level

你知道如何将键添加到数据框吗?

【问题讨论】:

    标签: python-3.x pandas dataframe concatenation


    【解决方案1】:

    首先删除列中MultiIndex的参数ignore_index=True,然后按tuple选择:

    data = pd.concat([df1, df2],keys=['snow','wind'], axis=1)
    print (data)
               snow         wind        
                 tl  ff  dd   tl  ff  rf
    2016-01-01   x1  y1  z1   x1  y1  z1
    2016-01-02   x2  y2  z2   x2  y2  z2
    2016-01-03   x3  y3  z3   x3  y3  z3
    2016-01-04   x4  y4  z4   x4  y4  z4
    
    print (data[('snow','tl')])
    2016-01-01    x1
    2016-01-02    x2
    2016-01-03    x3
    2016-01-04    x4
    Name: (snow, tl), dtype: object
    

    【讨论】:

    • 所以键'snow'和'wind'出现在通常的print()命令中?因为他们不为我做,即使在删除了 ignore_index=True 之后。不幸的是,通过元组选择会引发 KeyError: ('snow', 'tl')。
    • @Vroni - 你确定吗? print (data.columns) 是什么?
    • 对不起,我的错。我还向数据框添加了列名,我猜它们会覆盖键和其他所有内容。现在我尝试不使用列名,一切都按照您的描述显示。
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2015-08-19
    • 2022-11-29
    • 2020-01-06
    • 2014-07-11
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多