Python-pandas批量读写操作Excel

环境:Python3.8.5 pip20.2.4 安装pandas库

条件:统计所有Excel中药品名称、数量,汇总到一张表中。
在这里插入图片描述
注意问题:初始化DataFrame()要放到for循环外中,否则会导致只统计最后一次循环的内容。

# 导包
import pandas as pd
import os
# 文件前置路径
path = r"C:\Users\admin\Desktop\99\222"
# 获取所有的文件
filename = os.listdir(path)
# 初始化DataFrame
data = pd.DataFrame()
# 遍历文件集合
for i in range(len(filename)):
    # 读取文件
    df = pd.read_excel("C:\\Users\\admin\\Desktop\\99\\222\\" + filename[i])
    # 去掉第二行   感觉可以把这行代码去掉,未实验。
    df1 = df.drop([1])
    # 去掉药品名称列与数量的行数据包含NaN数据
    df2 = df1[['Unnamed: 2', '配药信息']].dropna(axis=0)
    # 得到最终需要的数据
    df3 = df2.drop([0])
    # 追加数据
    data = data.append(df3)
# 写入到xxx.xlsx文件中
info_marks = pd.DataFrame(data)
info_marks.to_excel('222.xlsx')
打印df  得到以下格式 

在这里插入图片描述

打印df1  得到以下格式 

在这里插入图片描述

打印df2  得到以下格式 

在这里插入图片描述

打印df3  得到最终格式   去掉了药品名称与数量行

在这里插入图片描述

结果:在这里插入图片描述
遗留问题:如果有重复数据,可以去重,并且把数量相加。就不需要在去Excel中做一遍统计了。 有时间在琢磨琢磨。或者看到这个信息问题的大哥们,给出个解决意见。十分感谢。在这里插入图片描述
PS:一开始想用Xlwt、Xlrd库处理,没找到批量处理的办法。。。就放弃了

# 单文件处理
# 写excel
import xlwt
# 读excel
import xlrd

# 初始化workbook对象
f = xlwt.Workbook()
# 添加一个workbook对象
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)
# 标题 也就是第一行值
row0 = ['药品名称', '数量']
# 列值 第一列的值
column0 = []
# 列值 第二列的值
column1 = []

filename = r"C:\Users\admin\Desktop\99\liu\安时明_2020071800566(2020071800527).XLS"
data = xlrd.open_workbook(filename)
byindex = data.sheet_by_index(0)  # 获取第几个sheet页
cols = byindex.col_values(2)  # 获取 药 品 名 称 这一列的值
cols2 = byindex.col_values(17)  # 数量 这一列的值
del cols[1]  # 去除Excel中 C2值
del cols[-1]  # 去除Excel中 处方总金额 这一处的值
ypName = [i for i in cols if i != '']  # 去除空元素
del cols2[0]  # 去除Excel中 R1的值
del cols2[0]  # 去除Excel中 R2的值
sl = [i for i in cols2 if i != '']  # 去除空元素
column0 = ypName
column1 = sl
# 生成第一行的值
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])
# 生成第一列的值 药品名称
for i in range(0, len(column0)):
    sheet1.write(i + 1, 0, column0[i])
# 生成第二列的值 数量
for i in range(0, len(column1)):
    sheet1.write(i + 1, 1, column1[i])
# 保存  目录为当前文件目录下
f.save('test.xls')

请多指教 谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值