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 pddef 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: 100 序号 年级 学号 ... 现转入专业 转入年级 备注1 1 2017 0121707780732 ... 汽车服务 2017 NaN2 2 2017 0121701100926 ... 英语 2018 NaN3 3 2017 0121713590104 ... 法学(余) 2019 NaN4 4 2018 0121610870218 ... 社会工作 2018 NaN5 5 2018 0121706300123 ... 工程 2018 NaN6 6 2018 0121806291116 ... 土木卓越工程师 2018 NaN7 7 2018 0121802950540 ... 人力资源管理 2018 NaN8 8 2018 0121804180117 ... 土木卓越工程师 2018 NaN9 9 2018 0121809360312 ... 工商 2018 NaN[10 rows x 11 columns]
忽略表格标题,skiprows=1,略过1行
import pandas as pddef 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 pddef 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 pddef excel_to_df(file):student_df = pd.read_excel(file, skiprows=1, nrows=100,usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])# print(student_df.head(10))return student_dfdef 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 梁心语 女 化生学院 制药 机电学院 工业gc35 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 陈迎盈 女 机电学院 包装 机电学院 工业gc76 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 廖睿偲 女 管理学院 工商管理类 国教学院 金融gj26 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)

