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

2024-09-28 21:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个数据文件(从excel)转换成熊猫格式,并包含在字典中。以下是获取数据帧的方法:

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

^{pr2}$

这将输出一个文件,它只将文件一个接一个放在一个长文件中,而不考虑它们共享的公共字段。。。所以很难用它来做进一步的分析。在

以下是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')

数据的显示效果更好,但没有在相似的值上联接:(只在一个接一个显示的数据帧上联接。。。 以下是错误的输出示例:

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

有什么想法可以正确的语法组合字典和获得所需的输出?在


Tags: 数据字典valuecodevalexcelxyzhid
2条回答

嗯,我想你连接错轴了。连接是沿着列进行的,因此每个数据帧都被放在另一个数据帧下。我想您正在寻找沿着行的连接,其中每个数据帧被逐行对齐并与其他数据帧合并,这样您就得到了一个宽表,而不是一个长表。在

尝试:

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。在

对我有效的方法是将列CODE设置为索引:

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

然后,以下工作如预期:

^{pr2}$

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


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

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

相关问题 更多 >