将字典中包含的数据与pandas合并

时间:2016-02-24 03:27:10

标签: python pandas

我有几个数据文件(来自excel)转换为pandas格式并包含在字典中。以下是我获取数据帧的方法:

dataList = files

nameList = []
for raster in dataList:
        path_list = raster.split(os.sep)
        name = path_list[5][:-4]
        nameList.append(name)

dataDct = {}
for k, v in zip(nameList,dataList):
    dataDct[k] = read_excel(v).rename(columns={'Main Value': 'Main Value '+k, 'Auxiliary Value': 'Auxiliary Value '+k})

我使用以下方法组合它们: (字典为dataDct

concat(dataDct.values(), join='outer', ignore_index=False).to_excel(writer, sheet_name='values').to_excel(writer, sheet_name='values')
writer.save()

这将输出一个文件,它只将文件一个接一个地放在一个长文件中,忽略它们共享的公共字段......所以很难用它进行进一步的分析。

以下是dataDct中包含的数据框示例:

IN [2]:
value(HIB)
      1  CODE        VALUE_HIB       AUX_VAL_HIB
      2  F.F         00000    
      3  0.0.1   
      4  0.0.2       06-02-2016
      5  C.6         XYZ-21555FFF
      6  3.8.0*1     45000GHZ        01.01.2016

   Value (HIC)
      1  CODE        VALUE_HIC       AUX_VAL_HIC
      2  F.F         00000           111111
      3  0.0.1   
      4  0.0.3       06-02-2016
      5  C.6         XYZ-216666FFF
      6  3.9.0*1     65000GHZ        01.02.2016

   Value (HID)
      1   CODE        VALUE_HID       AUX_VAL_HID
      2  F.F         00000           0101010
      3  A.1.1       85 GHZ
      4  V.1.1       06-02-2016
      5  C.6         XYZ-21776FFF
      6  3.9.0*1     3000GHZ        01.02.2016

预期输出

OUT[2]:
1  CODE    VALUE_HIB   AUX_VAL_HIB  VALUE_HIC   AUX_VAL_HIC  VALUE_HID   AUX_VAL_HID
2  F.F     00000                    00000       111111       00000      01010101
3  0.0.1   
4  0.0.2   06-02-2016
5  0.0.3                             06-02-2016
6  A.1.1                                                      85ghz
7  C.6     XYZ-21555FFF             XYZ-216666FFF            XYZ-21776FFF
8  V.1.1                                                      06-02-2016
9  3.8.0*1 45000GHZ     01.01.2016
10  3.9.0*1                          65000GHZ     01.02.2016   3000GHZ          01.02.2016

这个想法是数据对齐并加入...... 我试过加入轴:

concat(dataDct.values(), join='outer', ignore_index=False, axis=1).to_excel(writer, sheet_name='values')

数据显示效果更好,但没有加入相似的值:(只有在DAATAFRAMES上一个接一个地显示... 这是错误的示例输出:

1  CODE        VALUE_HIB       AUX_VAL_HIB          VALUE_HIC       AUX_VAL_HIC
      2  F.F         00000    
      3  0.0.1   
      4  0.0.2       06-02-2016
      5  C.6         XYZ-21555FFF
      6  3.8.0*1     45000GHZ        01.01.2016



        F.F                                           00000           111111
        0.0.1   
       0.0.3                                          06-02-2016
        C.6                                                           XYZ-216666FFF
       3.9.0*1                                         65000GHZ        01.02.2016

关于组合字典并获得所需输出的正确语法的任何想法?

2 个答案:

答案 0 :(得分:0)

嗯,我想你是在错误的轴上连接起来的。您的串联发生在列中,因此每个DataFrame都放在另一个DataFrame下。我认为你正在寻找沿着行的连接,其中每个DataFrame与行的其他DataFrame对齐并合并,这样你就可以得到一个宽表,而不是一个长表。

尝试:

concat(dataDct.values(), axis=1, join='outer', join_axes='CODE', ignore_index=False).to_excel(writer, sheet_name='values')
writer.save()

如果不起作用,请告诉我。如果这不是您要找的答案,请修改您的问题以提供Minimal Complete and Verifiable Example。另外,请遵守Pandas question guidelines

答案 1 :(得分:0)

对我来说有用的是将列CODE设置为索引:

for key in dataDct:
    dataDct[key].set_index('CODE', inplace=True)

然后以下工作按预期进行:

pd.concat(dataDct.values(), axis=1)

如果您有NaN个值,可以通过附加.fillna("")删除它们。

修改:根据您的评论,您似乎在CODE列中有重复的值。一种解决方案是删除重复项:

for key in dataDct:
    dataDct[key].set_index('CODE', inplace=True)
    dataDct[key].drop_duplicates(inplace=True)