我有几个数据文件(来自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
关于组合字典并获得所需输出的正确语法的任何想法?
答案 0 :(得分:0)
尝试:
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)