处理Excel表格---匹配数据

处理Excel表格--匹配数据

简介

我有一个Excel表格,第一行和第一列是相同的城市名称,用作行标题和列标题,然后现在我有不同省份不同城市鸟类迁徙的数据,这些城市名称是迁入的城市名称,城市对应文件内部是这个城市不同日期下记录的迁徙数据,数据是csv文件,csv文件包括城市,省名称,和数字:城市是从哪个城市迁入到我这个csv文件城市中。我要做的就是将这些csv文件里的数据匹配到Excel表格中。
Excel如下所示:
在这里插入图片描述
数据如下:
在这里插入图片描述
csv文件如下:
在这里插入图片描述

代码

# 导包
import os
from openpyxl import load_workbook
import pandas as pd
import warnings
warnings.filterwarnings("ignore")

# 加载Excel表格,并打开存储数据的文件
ec117_file=r'D:\S\矩阵_1.xlsx'
csv_folder=r'D:\S\1'
workbook=load_workbook(ec117_file)

# 遍历csv文件夹中所有名字带有117的csv文件
with pd.ExcelWriter(r'D:\S\矩阵_1.xlsx',mode='a') as writer:
    for root,dirs,files in os.walk(csv_folder):
    
        print('1111111')
        for filename in files:
        
            if '117' not in filename:
                continue
            print(filename)
            # 提取csv文件中的城市名字
            city=filename[:-16]
            column_index=None
            # 获取第一个工作表
            worksheet=writer.book.worksheets[0]
            # 获取第一行所有单元格
            first_row=worksheet[1]

            for index,cell in enumerate(first_row,1):
                if cell.value==city:
                    column_index=index
                    break
            if column_index is None:
                # 如果city不在第一行,则跳过该csv文件,继续下一个循环
                continue


            ec=worksheet.get_all_values()
            # 将第一行作为列索引,第二行及以后作为DataFrame
            df_ec=pd.DataFrame(data=ec[1:],columns=ec[0])
            a_col=df_ec.iloc[:,column_index-1]

            # 打开117类似csv文件
            csv_file=os.path.join(root,filename)
            df_csv=pd.read_csv(csv_file,header=0,index_col=None,encoding='gb2312')
            df_city_value=df_csv.iloc[:,[0,2]]

            for i in range(len(df_csv)):
                name,value=df_city_value.iloc[i]

                if name in a_col.index:
                    a_col.loc[name]=value
                else:
                    a_col.loc[name]=0

            miss_city=set(a_col.index)-set(df_city_value.iloc[:,0])

            for city in miss_city:
                a_col.loc[city]=0
            # 奖处理过的数据添加到DataFrame中

            print('!')
            writer.save()
            print('2222222222') # 单纯为了显示运行到哪一步了

遇到一个花了挺长时间解决的问题是它只能保存最后一个csv文件的内容,就导致出现了整个Excel表格中只有一列有数据,最后用with pd.ExcelWriter(r’D:\S\矩阵_1.xlsx’,mode=‘a’) as writer 解决

还有一个缺点,匹配的时间很长,跑一次大概有300的csv文件需要匹配,需要大概半个小时的时间,希望有大佬可以指点一下,或者有其他有问题的地方欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值