学习记录-python--pandas

有多个excel表,total文件夹中有多个csv表格:每个csv文件中有ID、ID、名称、大小等多个列,表2中有ID、名称两列。
任务:通过ID和名称来匹配表1和表2的数据,并将表1对应的大小补充到表2的最后一列

在这里插入图片描述

我们通过 pandas 库来处理我们的数据,os 来进行文件操作,首先导入

import pandas as pd
import os

注意:一定要看清楚文件的编码方式,我这里是csv格式的文件,编码方式为“ansi”
如果不清楚文件的编码方式,可以用记事本打开,右下角就有编码方式在这里插入图片描述
接着可以开始读取文件

# 首先读取表2
# path_total是文件完整路径
# 用 pandas 的read_csv 方法读取,如果是excel表格就是 read_excel
total_form = pd.read_csv(path_total, encoding=encoding)

注意:在读取和写入文件时,一定要注意编码方式!!!

# 读取total文件夹中的表格
for file in os.listdir(path_month):
    # 拼接路径
    file_path = os.path.join(path_month, file)

    # 获取total中各个文件的sheet名
    monthly_sheetname = file[:-4]

    # 读取文件,读取时跳过首行
    # 这里是根据我的表格内容进行调整,不需要可以去掉
    monthly_form = pd.read_csv(file_path, encoding=encoding, skiprows=1)

    # 筛选出要匹配的列
    # :前面代表行,为空则代表所有行,冒号后面代表列,2、3、7分别代表第3、4、8列(索引从0开始)
    monthly_data = monthly_form.iloc[:, [2, 3, 7]]
    total_data = total_form.iloc[:, [0, 1]]

    # 重命名列
    # 由于我的文件中有两个列名相同,均叫做“ID”,因此将第一个ID列重命名,避免重复
    monthly_data.rename(columns={'ID': 'ID_旧', 'ID.1': 'ID'}, inplace=True)

    # 合并两个表格
    merged_form = pd.merge(monthly_data, total_data, on=['ID', '名称'], how='right')

    # 创建新列并赋值
    merged_form[monthly_sheetname] = merged_form.pop('大小')

    # 找到表2最后一个非空列的索引
    # 先找到最后一个非空列的列名last_non_empty_column_index,再通过get_loc()方法获取该列的索引last_column_index 
    last_non_empty_column_index = total_form.columns[-1]
    last_column_index = total_form.columns.get_loc(last_non_empty_column_index)

    # 在 total_form 的最后一个非空列的右侧插入新列
    total_form.insert(last_column_index + 1, monthly_sheetname, merged_form[monthly_sheetname])

# 循环结束后,将更新后的 total_form 写入 CSV 文件
total_form.to_csv(path_total, index=False, encoding="ansi")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值