环境: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')
请多指教 谢谢