四时宝库

程序员的知识宝库

使用Pandas关联Excel表操作示例

背景:

有时候可能会遇到数据量巨大的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()


运行后结果如下:



发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接