在处理观测站气象数据时,遇到了需要将两个表的数据整理到一起的问题,两个表的数据结构如下:
观测站点的详细数据
气象观测数据
现在需要将两个表按第一列‘Sta_ID’拼接,将第二个表中‘Sta_ID’值与第一个表相同的行拼接到同一行,效果如下:
在这里插入图片描述
需要的库基本有pandas,xlrd,xlwt这几个,首先使用pandas.read_excel()将数据分别读入pandas。

A = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='AOD_Max') # 读取 excel
B = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='Station_Max', index_col=0)

pandas读入表A
pandas读入表B,这里设置了默认索引列

下一步进行合并,使用pandas.concat()函数实现,关于concat()函数具体的解释可以参考:

https://blog.csdn.net/mr_hhh/article/details/79488445

但是这里有个问题,需要设置索引列为‘Sta_ID’这一列,如果默认索引为这一列,由于该列有重复项,在执行concat()函数时会报错
InvalidIndexError: Reindexing only valid with uniquely valued Index objects’
为解决这个问题,将表A读入时采用默认索引,然后用drop_duplicates()函数删掉重复的行。注意:我的数据B表没有重复项要去除,所以读的时候直接默认索引列为‘Sta_ID’了。

X = A.drop_duplicates(subset=['Sta_ID'])

这里我在测试的时候发现,如果把返回值还给A(如A.drop_duplicates(subset=['Sta_ID'])A=A.drop_duplicates(subset=['Sta_ID'])),那A是没有变化的,所以把这个值给了X,就可以实现了。
表X,即A表删除重复行的结果

drop_duplicates()函数参考

https://blog.csdn.net/Disany/article/details/82689948

现在需要把删除重复项的表X的索引列改为‘Sta_ID’列:

X = X.set_index('Sta_ID')

更换索引的X表
最后完成拼接:

merge = pd.concat([X, B], axis=1, join='inner') 

完整程序如下:

import pandas as pd
# 从excel导入表
A = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='AOD_Max') # 读取 excel
B = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='Station_Max', index_col=0)
# 去除重复行
X = A.drop_duplicates(subset=['Sta_ID'])
# 更换索引列
X = X.set_index('Sta_ID')
# 按索引列合并
merge = pd.concat([X, B], axis=1, join='inner') 
print(merge)
# pandas表存出
writer = pd.ExcelWriter('E:\\MODIS\\MCD19A2\\AOD_Sta.xls')
merge.to_excel(writer,float_format='%.5f')
writer.save()

合并后的表merge

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐