pandas.``read_excel
(*args, **kwargs)
**
pandas读取excel文件,需要单独的xlrd模块支持
pip install xlrd
用Pandas可以读取Excel文件中的数据为Dataframe类型,Excel文件的读取主要应用read_excel()方法,使用时可能需要先用“pip install xlrd”安装xlrd模块。read_excel()方法大部分参数都有默认值,只需要设置少量的参数便可以完成大部分的数据读取工作。其主要参数及其意义如下:
pd.read_excel(io, sheet_name=0, header=0, names=None,
usecols=None, squeeze=False, converters=None,
skiprows=None, nrows=None, skipfooter=0)
- io:Excel的存储路径
2. sheet_name:要读取的工作表名称,默认读取第一个工作表。可以是整型数字、列表名或SheetN。整型数字:目标sheet所在的位置,以0为起始,比如sheet_name = 1代表第2个工作表。列表名:目标sheet的名称,中英文皆可。SheetN:代表第N个sheet,S要大写,注意与整型数字的区别。
3. header:用哪一行作列名。默认为0 ,如果设置为[0,1],则表示将前两行作为多重索引。
4. names:自定义最终的列名。一般适用于Excel缺少列名,或者需要重新定义列名的情况。names的长度必须和Excel列长度一致,否则会报错。
5. index_col:用作索引的列
6. usecols:需要读取哪些列。可以使用整型,从0开始,如[0,2,3];也可以使用Excel传统的列名A、B等字母,如”A:C, E” = “A, B, C, E”,注意两边都包括。usecols 可避免读取全量数据,而是以分析需求为导向选择特定数据,提高效率。
7. squeeze:当数据仅包含一列。squeeze为True时,返回Series,反之返回DataFrame。
8. converters:强制规定列数据类型,主要用途是保留以文本形式存储的数字。
pandas默认将文本类的数据读取为整型,converters 参数可以指定各列数据的类型,如converters = {‘出货量’:float, ‘月份’:str }, 将“出货量”列数据类型规定为浮点数,“月份”列规定为字符串类型。
9. skiprows:跳过特定行。skiprows= n 跳过前n行; skiprows = [a, b, c] 跳过第a+1,b+1,c+1行(索引从0开始)。排除前3行是skiprows=3,排除第3行是skiprows=[3]。
10. nrows:需要读取的行数,nrows = n 读取前n行。
11. skipfooter: 跳过末尾行数,skipfooter = n 跳过末尾的n行。
读excel文件,nrows=10表示只读取前面10行数据。
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, nrows=10)
print(student_df.head(10))
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
excel_to_df(filename)
2020年转专业拟接收学生名单 Unnamed: 1 Unnamed: 2 ... Unnamed: 8 Unnamed: 9 Unnamed: 10
0 序号 年级 学号 ... 现转入专业 转入年级 备注
1 1 2017 0121707780732 ... 汽车服务 2017 NaN
2 2 2017 0121701100926 ... 英语 2018 NaN
3 3 2017 0121713590104 ... 法学(余) 2019 NaN
4 4 2018 0121610870218 ... 社会工作 2018 NaN
5 5 2018 0121706300123 ... 工程 2018 NaN
6 6 2018 0121806291116 ... 土木卓越工程师 2018 NaN
7 7 2018 0121802950540 ... 人力资源管理 2018 NaN
8 8 2018 0121804180117 ... 土木卓越工程师 2018 NaN
9 9 2018 0121809360312 ... 工商 2018 NaN
[10 rows x 11 columns]
忽略表格标题,skiprows=1,略过1行
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1, nrows=10) #
print(student_df.head(10))
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
excel_to_df(filename)
只读取指定的列数据,usecols=[‘年级’,’姓名’,’性别’,’原专业’,’现转入专业’],列表中为读取的列名。
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1, nrows=10,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
print(student_df.head(10))
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
excel_to_df(filename)
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
0 2017 林海琳 女 汽车学院 能源 汽车学院 汽车服务
1 2017 戴兆晖 男 材料学院 材科 外语学院 英语
2 2017 彭禹钧 男 经济学院 经济(创业试点) 法学社会学院 法学(余)
3 2018 白鲤 男 计算机学院 计算机卓越工程师 法学社会学院 社会工作
4 2018 陈佳慧 女 土建学院 建筑学 土建学院 工程
5 2018 陈凯风 男 土建学院 给排水 土建学院 土木卓越工程师
6 2018 陈雨核 女 交通学院 港口航道 管理学院 人力资源管理
7 2018 邓立贤 男 土建学院 给排水 土建学院 土木卓越工程师
8 2018 杜昊宇 男 信息学院 通信工程 管理学院 工商
9 2018 冯新航 男 资环学院 采矿工程 资环学院 地理信息
Group by分组
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True,
squeeze=<object object>, observed=False, dropna=True)
groupby()是一个分组函数,对数据进行分组操作的过程可以概括为:split-apply-combine三步:
1.按照键值(key)或者分组变量将数据分组。
2.对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。
3.将函数计算后的结果聚合。
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1, nrows=100,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
# print(student_df.head(10))
return student_df
def classify_of_school(student_df):
"""接收dataframe为参数,分组"""
group_by_school = student_df.groupby('原学院') # 根据'原学院'分组
for name, group in group_by_school: # 按分组名查看各分组
print(name) # 输出当前组名
print(group) # 输出当前组数据
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
stu_df = excel_to_df(filename)
classify_of_school(stu_df)
交通学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
6 2018 陈雨核 女 交通学院 港口航道 管理学院 人力资源管理
23 2018 彭冰 女 交通学院 船舶与海洋(余) 管理学院 工商
24 2018 彭敢 男 交通学院 港口航道 交通学院 船舶与海洋(余)
28 2018 吴文斌 男 交通学院 船舶与海洋(余) 能动学院 能源(余)
29 2018 余军作 男 交通学院 港口航道 交通学院 道桥与渡河(余)
36 2019 敖荣森 男 交通学院 海洋工程类 化生学院 应用化学
39 2019 白海乐 女 交通学院 交通运输类 信息学院 电子信息类(工学)
44 2019 曹帅 男 交通学院 交通运输类 经济学院 金融
50 2019 柴世欣 男 交通学院 船海学硕 计算机学院 计算机类(余)
57 2019 陈弘轩 男 交通学院 海洋工程类 汽车学院 机械类(车辆)
58 2019 陈佳玮 男 交通学院 船海卓越工程师 理学院 电子信息类(理学)
90 2019 旦增达娃 男 交通学院 海洋工程类 交通学院 交通运输类
91 2019 党明静 女 交通学院 船海卓越工程师 化生学院 生物技术
信息学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
8 2018 杜昊宇 男 信息学院 通信工程 管理学院 工商
19 2018 刘焙贝 男 信息学院 通信卓越工程师 外语学院 英语
75 2019 陈禹轲 男 信息学院 电子信息类(工学) 计算机学院 计算机类(余)
化生学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
17 2018 梁心语 女 化生学院 制药 机电学院 工业gc
35 2018 朱星语 女 化生学院 制药卓越工程师 土建学院 工程
37 2019 巴哈地尔·图尔荪 男 化生学院 应用化学 化生学院 制药
60 2019 陈嘉森 男 化生学院 生物技术 机电学院 机械类(机电)
84 2019 程琦 男 化生学院 制药 化生学院 生物技术
97 2019 丁冠中 男 化生学院 生物技术 机电学院 机械类(机电)
国教学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
79 2019 陈竹君 女 国教学院 车辆gj 国教学院 金融gj
土建学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
4 2018 陈佳慧 女 土建学院 建筑学 土建学院 工程
5 2018 陈凯风 男 土建学院 给排水 土建学院 土木卓越工程师
7 2018 邓立贤 男 土建学院 给排水 土建学院 土木卓越工程师
10 2018 黄庭武 男 土建学院 工程 土建学院 土木卓越工程师
11 2018 姜明壮 男 土建学院 岩土JD 法学社会学院 社会工作
14 2018 李纪星 男 土建学院 给排水 土建学院 土木卓越工程师
20 2018 刘传回 男 土建学院 工程 土建学院 土木卓越工程师
32 2018 赵栩晨 男 土建学院 给排水 土建学院 土木卓越工程师
33 2018 郑海清 男 土建学院 工程 土建学院 土木卓越工程师
47 2019 曾泓力 男 土建学院 土木类 信息学院 电子信息类(工学)
73 2019 陈溢语 女 土建学院 土木类 土建学院 建筑类
77 2019 陈展鹏 男 土建学院 土木类 汽车学院 机械类(车辆)
外语学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
21 2018 马文昌 男 外语学院 英语 土建学院 建筑环境
22 2018 马文轩 男 外语学院 英语 土建学院 建筑环境
48 2019 曾子良 男 外语学院 外语类 经济学院 经济
65 2019 陈鹏航 男 外语学院 外语类 法学社会学院 法学(余)
机电学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
13 2018 李昊明 男 机电学院 包装 机电学院 机自
30 2018 张广晖 男 机电学院 测控卓越工程师 管理学院 信管
42 2019 蔡睿哲 男 机电学院 测控 信息学院 电子信息类(工学)
56 2019 陈昊轩 男 机电学院 机械类(机电) 信息学院 电子信息类(工学)
62 2019 陈亮霓 女 机电学院 包装 机电学院 智能制造
63 2019 陈吕龙 男 机电学院 包装 机电学院 测控
66 2019 陈仁奎 男 机电学院 包装 汽车学院 机械类(车辆)
68 2019 陈涛 男 机电学院 机械类(机电) 计算机学院 计算机类
72 2019 陈旭涵 男 机电学院 机械类(机电) 艺设学院 工设g(艺)
74 2019 陈迎盈 女 机电学院 包装 机电学院 工业gc
76 2019 陈昱超 男 机电学院 机械类(机电) 信息学院 电子信息类(工学)
81 2019 陈宗泽 男 机电学院 机械类(机电) 理学院 数学类
材料学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
1 2017 戴兆晖 男 材料学院 材科 外语学院 英语
45 2019 曾保 男 材料学院 材料类 计算机学院 计算机类(余)
67 2019 陈荣 男 材料学院 材料成型及控制工程 管理学院 信管
99 2019 丁睿 男 材料学院 材料类 理学院 电子信息类(理学)
材料示范学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
94 2019 邓文浩 男 材料示范学院 材科(试点) 土建学院 土木类
汽车学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
0 2017 林海琳 女 汽车学院 能源 汽车学院 汽车服务
15 2018 李龙健 男 汽车学院 能源 经济学院 金融
82 2019 谌永康 男 汽车学院 机械类(车辆) 管理学院 工商管理类
89 2019 崔瀛 女 汽车学院 机械类(车辆) 材料学院 材料类
法学社会学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
34 2018 周嘉文 男 法学社会学院 编辑出版 法学社会学院 广告学
51 2019 陈晨 女 法学社会学院 教育技术(余) 理学院 电子信息类(理学)
54 2019 陈发明 男 法学社会学院 社会工作 经济学院 经济
95 2019 邓雯琦 女 法学社会学院 社会工作 外语学院 外语类
96 2019 地力热巴·吾斯曼 女 法学社会学院 社会工作 法学社会学院 法学(余)
物流学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
52 2019 陈诚 男 物流学院 物流管理与工程类 理学院 数学类
53 2019 陈定聪 男 物流学院 物流管理与工程类 经济学院 金融
83 2019 程蕾雅 女 物流学院 物流管理与工程类 计算机学院 计算机类(余)
理学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
12 2018 柯筱婧 女 理学院 信计 法学社会学院 编辑出版
16 2018 李怡晗 女 理学院 光信科 艺设学院 设计学类
38 2019 巴玉宁 女 理学院 电子信息类(理学) 法学社会学院 社会工作
86 2019 程先泽 男 理学院 电子信息类(理学) 材料学院 材料类
92 2019 邓灿 男 理学院 电子信息类(理学) 信息学院 电子信息类(工学)
管理学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
18 2018 廖睿偲 女 管理学院 工商管理类 国教学院 金融gj
26 2018 王婧婷 女 管理学院 工商 法学社会学院 法学(余)
27 2018 王艳 女 管理学院 营销 管理学院 会计
31 2018 张景 女 管理学院 人力资源管理 法学社会学院 法学(余)
46 2019 曾晗东 男 管理学院 工商管理类 汽车学院 机械类(车辆)
49 2019 查涛 男 管理学院 信管 机电学院 机械类(机电)
59 2019 陈佳艺 女 管理学院 信管 化生学院 生物技术
85 2019 程诗雪 女 管理学院 工商管理类 信息学院 电子信息类(工学)
93 2019 邓松矗 男 管理学院 工商管理类 信息学院 电子信息类(工学)
经济学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
2 2017 彭禹钧 男 经济学院 经济(创业试点) 法学社会学院 法学(余)
61 2019 陈丽 女 经济学院 经济(创业试点) 经济学院 经济
78 2019 陈至晟 男 经济学院 经济 机电学院 测控
能动学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
87 2019 程宇 男 能动学院 能源(余) 自动化学院 自动化
98 2019 丁灏楠 男 能动学院 能源(余) 信息学院 电子信息类(工学)
自动化学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
69 2019 陈文博 男 自动化学院 电气 自动化学院 自动化
航运学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
25 2018 覃启祥 男 航运学院 海事管理(余) 机电学院 机自
70 2019 陈文俊 男 航运学院 海事管理(余) 机电学院 机械类(机电)
80 2019 陈梓萱 女 航运学院 海事管理(余) 信息学院 电子信息类(工学)
88 2019 程雨凡 男 航运学院 海事管理(余) 汽车学院 机械类(车辆)
计算机学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
3 2018 白鲤 男 计算机学院 计算机卓越工程师 法学社会学院 社会工作
资环学院
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
9 2018 冯新航 男 资环学院 采矿工程 资环学院 地理信息
40 2019 蔡成宇 男 资环学院 矿业类 信息学院 电子信息类(工学)
41 2019 蔡璐 女 资环学院 矿业类 资环学院 环境科学与工程类
43 2019 曹霖 男 资环学院 环境科学与工程类 机电学院 机械类(机电)
55 2019 陈郭枭 男 资环学院 矿业类 管理学院 信管
64 2019 陈梦蝶 女 资环学院 矿业类 理学院 数学类
71 2019 陈晓歌 女 资环学院 地理科学类 机电学院 机械类(机电)
选择分组,查看输出:
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1, nrows=100,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
# print(student_df.head(10))
return student_df
def classify_of_school(student_df):
"""接收dataframe为参数,分组"""
group_by_school = student_df.groupby('原学院') # 根据'原学院'分组
print(group_by_school.get_group('航运学院')) # 选择分组,查看输出
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
stu_df = excel_to_df(filename)
classify_of_school(stu_df)
年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
25 2018 覃启祥 男 航运学院 海事管理(余) 机电学院 机自
70 2019 陈文俊 男 航运学院 海事管理(余) 机电学院 机械类(机电)
80 2019 陈梓萱 女 航运学院 海事管理(余) 信息学院 电子信息类(工学)
88 2019 程雨凡 男 航运学院 海事管理(余) 汽车学院 机械类(车辆)
分组统计数量
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
# print(student_df.head(10))
return student_df
def classify_of_school(student_df):
"""接收dataframe为参数,分组"""
group_by_school = student_df.groupby('原学院') # 根据'原学院'分组
print(group_by_school.原学院.count()) # 分组统计数量
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
stu_df = excel_to_df(filename)
classify_of_school(stu_df)
按学院输出转出学生数量
原学院
交通学院 100
信息学院 7
创业学院 2
化生学院 55
国教学院 9
土建学院 52
外语学院 22
安全应急学院 12
机电学院 92
材料学院 29
材料示范学院 2
汽车学院 8
法学社会学院 36
物流学院 48
理学院 21
管理学院 61
经济学院 19
能动学院 34
自动化学院 3
航运学院 41
艺设学院 4
计算机学院 5
资环学院 80
马克思主义学院 13
Name: 原学院, dtype: int64
按转入学院分组
import pandas as pd
def excel_to_df(file):
student_df = pd.read_excel(file, skiprows=1,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
# print(student_df.head(10))
return student_df
def classify_of_school(student_df):
"""接收dataframe为参数,分组"""
group_by_school = student_df.groupby('现转入学院') # 根据'原学院'分组
# print(group_by_school.原学院.count()) # 分组统计数量
print(group_by_school.现转入学院.count())
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
stu_df = excel_to_df(filename)
classify_of_school(stu_df)
现转入学院
交通学院 21
信息学院 105
化生学院 19
国教学院 11
土建学院 36
外语学院 17
安全应急学院 12
机电学院 80
材料学院 26
汽车学院 69
法学社会学院 49
物流学院 8
理学院 60
管理学院 55
经济学院 39
能动学院 32
自动化学院 51
艺设学院 8
计算机学院 38
资环学院 19
Name: 现转入学院, dtype: int64
写入csv、json、html文件
DataFrame.to_json(path_or_buf=None, orient=None, date_format=None,
double_precision=10, force_ascii=True, date_unit='ms',
default_handler=None, lines=False, compression='infer',
index=True, indent=None)
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None,
header=True, index=True, index_label=None, mode='w', encoding=None,
compression='infer', quoting=None, quotechar='"', line_terminator=None,
chunksize=None, date_format=None, doublequote=True, escapechar=None,
decimal='.', errors='strict')
DataFrame.to_html(buf=None, columns=None, col_space=None, header=True, index=True,
na_rep='NaN', formatters=None, float_format=None, sparsify=None,
index_names=True, justify=None, max_rows=None, max_cols=None,
show_dimensions=False, decimal='.', bold_rows=True, classes=None,
escape=True, notebook=False, border=None, table_id=None,
render_links=False, encoding=None)
import pandas as pd
def excel_to_df(file):
student_df = pd.efile, skiprows=1,
usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
# print(student_df.head(10))
return student_df
def df_to_file(student_df):
"""接收dataframe为参数,写入csv文件"""
student_df.to_csv('../data/2020转专业公示名单.csv')
student_df.to_json('../data/2020转专业公示名单.json', force_ascii=False, indent=4)
student_df.to_html('../data/2020转专业公示名单.html')
if __name__ == '__main__':
filename = '../data/2020转专业公示名单.xlsx'
stu_df = excel_to_df(filename)
df_to_file(stu_df)