背景:
有时候可能会遇到数据量巨大的excel文件,操作起来异常困难,这时候用Pandas处理就比较方便了。
示例:
一个excel文件中有两张表,如下:
需要将两张表关联,保留sno、course、degree、name字段,并且按照course进行分组,按照degree进行排序。
其中,会涉及到查看表结构、去重、处理缺失值、关联、保存等操作,代码如下:
import numpy as np
from numpy import nan as NaN
import pandas as pd
from pandas import Series, DataFrame
#获取文件sheet名称、sheet总数量
exl=pd.ExcelFile('./testdata.xlsx')
print(exl.sheet_names,len(exl.sheet_names))
#查看每个sheet前3条数据
info=pd.read_excel('./testdata.xlsx',sheet_name='info')
print(info.head(3))
print(info.shape)
degree=pd.read_excel('./testdata.xlsx',sheet_name='degree')
print(degree.head(3))
print(degree.shape)
#处理info表中重复值,以sno为唯一去重,保留重复值第一行
info=info.drop_duplicates(['sno'],keep='first')
#缺失值处理
#用列的平均值填充
# info=info.fillna(info.mean())
#用常数填充
info=info.fillna(18)
#将info表和degree表合并
m1=pd.merge(degree,info,on='sno',suffixes=['_info','_degree'])
#删除年龄列
m1=m1.drop(['age'],axis=1)
#普通单列排序,按照成绩排序
#ascending表示降序或升序
#method可选择dense\first\min\max,可自行查询用法
# m1['sort_num']=m1['degree'].rank(ascending=0,method='dense')
# m1=m1.sort_values(by='sort_num',ascending=True)
#按照course分组,按成绩排名(即:row_number()over()函数)
m1['group_sort']=m1['degree'].groupby(m1['course']).rank(ascending=0,method='dense')
m1=m1.sort_values(by=['course','group_sort'],ascending=True)
#保存m1表
writer = pd.ExcelWriter('m1.xlsx')
m1.to_excel(writer,sheet_name='m1')
writer.save()
writer.close()
运行后结果如下: