pandas.``read_excel(*args, **kwargs)
**
pandas读取excel文件,需要单独的xlrd模块支持

  1. pip install xlrd

用Pandas可以读取Excel文件中的数据为Dataframe类型,Excel文件的读取主要应用read_excel()方法,使用时可能需要先用“pip install xlrd”安装xlrd模块。read_excel()方法大部分参数都有默认值,只需要设置少量的参数便可以完成大部分的数据读取工作。其主要参数及其意义如下:

  1. pd.read_excel(io, sheet_name=0, header=0, names=None,
  2. usecols=None, squeeze=False, converters=None,
  3. skiprows=None, nrows=None, skipfooter=0)
  1. 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行数据。

  1. import pandas as pd
  2. def excel_to_df(file):
  3. student_df = pd.read_excel(file, nrows=10)
  4. print(student_df.head(10))
  5. if __name__ == '__main__':
  6. filename = '../data/2020转专业公示名单.xlsx'
  7. excel_to_df(filename)
  1. 2020年转专业拟接收学生名单 Unnamed: 1 Unnamed: 2 ... Unnamed: 8 Unnamed: 9 Unnamed: 10
  2. 0 序号 年级 学号 ... 现转入专业 转入年级 备注
  3. 1 1 2017 0121707780732 ... 汽车服务 2017 NaN
  4. 2 2 2017 0121701100926 ... 英语 2018 NaN
  5. 3 3 2017 0121713590104 ... 法学(余) 2019 NaN
  6. 4 4 2018 0121610870218 ... 社会工作 2018 NaN
  7. 5 5 2018 0121706300123 ... 工程 2018 NaN
  8. 6 6 2018 0121806291116 ... 土木卓越工程师 2018 NaN
  9. 7 7 2018 0121802950540 ... 人力资源管理 2018 NaN
  10. 8 8 2018 0121804180117 ... 土木卓越工程师 2018 NaN
  11. 9 9 2018 0121809360312 ... 工商 2018 NaN
  12. [10 rows x 11 columns]

忽略表格标题,skiprows=1,略过1行

  1. import pandas as pd
  2. def excel_to_df(file):
  3. student_df = pd.read_excel(file, skiprows=1, nrows=10) #
  4. print(student_df.head(10))
  5. if __name__ == '__main__':
  6. filename = '../data/2020转专业公示名单.xlsx'
  7. excel_to_df(filename)

只读取指定的列数据,usecols=[‘年级’,’姓名’,’性别’,’原专业’,’现转入专业’],列表中为读取的列名。

  1. import pandas as pd
  2. def excel_to_df(file):
  3. student_df = pd.read_excel(file, skiprows=1, nrows=10,
  4. usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
  5. print(student_df.head(10))
  6. if __name__ == '__main__':
  7. filename = '../data/2020转专业公示名单.xlsx'
  8. excel_to_df(filename)
  1. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  2. 0 2017 林海琳 汽车学院 能源 汽车学院 汽车服务
  3. 1 2017 戴兆晖 材料学院 材科 外语学院 英语
  4. 2 2017 彭禹钧 经济学院 经济(创业试点) 法学社会学院 法学(余)
  5. 3 2018 白鲤 计算机学院 计算机卓越工程师 法学社会学院 社会工作
  6. 4 2018 陈佳慧 土建学院 建筑学 土建学院 工程
  7. 5 2018 陈凯风 土建学院 给排水 土建学院 土木卓越工程师
  8. 6 2018 陈雨核 交通学院 港口航道 管理学院 人力资源管理
  9. 7 2018 邓立贤 土建学院 给排水 土建学院 土木卓越工程师
  10. 8 2018 杜昊宇 信息学院 通信工程 管理学院 工商
  11. 9 2018 冯新航 资环学院 采矿工程 资环学院 地理信息

Group by分组

  1. DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True,
  2. squeeze=<object object>, observed=False, dropna=True)

groupby()是一个分组函数,对数据进行分组操作的过程可以概括为:split-apply-combine三步:
1.按照键值(key)或者分组变量将数据分组。
2.对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。
3.将函数计算后的结果聚合。
09 其他数据读写 - 图1

  1. import pandas as pd
  2. def excel_to_df(file):
  3. student_df = pd.read_excel(file, skiprows=1, nrows=100,
  4. usecols=['年级','姓名','性别','原学院','原专业','现转入学院','现转入专业'])
  5. # print(student_df.head(10))
  6. return student_df
  7. def classify_of_school(student_df):
  8. """接收dataframe为参数,分组"""
  9. group_by_school = student_df.groupby('原学院') # 根据'原学院'分组
  10. for name, group in group_by_school: # 按分组名查看各分组
  11. print(name) # 输出当前组名
  12. print(group) # 输出当前组数据
  13. if __name__ == '__main__':
  14. filename = '../data/2020转专业公示名单.xlsx'
  15. stu_df = excel_to_df(filename)
  16. classify_of_school(stu_df)
  1. 交通学院
  2. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  3. 6 2018 陈雨核 交通学院 港口航道 管理学院 人力资源管理
  4. 23 2018 彭冰 交通学院 船舶与海洋(余) 管理学院 工商
  5. 24 2018 彭敢 交通学院 港口航道 交通学院 船舶与海洋(余)
  6. 28 2018 吴文斌 交通学院 船舶与海洋(余) 能动学院 能源(余)
  7. 29 2018 余军作 交通学院 港口航道 交通学院 道桥与渡河(余)
  8. 36 2019 敖荣森 交通学院 海洋工程类 化生学院 应用化学
  9. 39 2019 白海乐 交通学院 交通运输类 信息学院 电子信息类(工学)
  10. 44 2019 曹帅 交通学院 交通运输类 经济学院 金融
  11. 50 2019 柴世欣 交通学院 船海学硕 计算机学院 计算机类(余)
  12. 57 2019 陈弘轩 交通学院 海洋工程类 汽车学院 机械类(车辆)
  13. 58 2019 陈佳玮 交通学院 船海卓越工程师 理学院 电子信息类(理学)
  14. 90 2019 旦增达娃 交通学院 海洋工程类 交通学院 交通运输类
  15. 91 2019 党明静 交通学院 船海卓越工程师 化生学院 生物技术
  16. 信息学院
  17. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  18. 8 2018 杜昊宇 信息学院 通信工程 管理学院 工商
  19. 19 2018 刘焙贝 信息学院 通信卓越工程师 外语学院 英语
  20. 75 2019 陈禹轲 信息学院 电子信息类(工学) 计算机学院 计算机类(余)
  21. 化生学院
  22. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  23. 17 2018 梁心语 化生学院 制药 机电学院 工业gc
  24. 35 2018 朱星语 化生学院 制药卓越工程师 土建学院 工程
  25. 37 2019 巴哈地尔·图尔荪 化生学院 应用化学 化生学院 制药
  26. 60 2019 陈嘉森 化生学院 生物技术 机电学院 机械类(机电)
  27. 84 2019 程琦 化生学院 制药 化生学院 生物技术
  28. 97 2019 丁冠中 化生学院 生物技术 机电学院 机械类(机电)
  29. 国教学院
  30. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  31. 79 2019 陈竹君 国教学院 车辆gj 国教学院 金融gj
  32. 土建学院
  33. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  34. 4 2018 陈佳慧 土建学院 建筑学 土建学院 工程
  35. 5 2018 陈凯风 土建学院 给排水 土建学院 土木卓越工程师
  36. 7 2018 邓立贤 土建学院 给排水 土建学院 土木卓越工程师
  37. 10 2018 黄庭武 土建学院 工程 土建学院 土木卓越工程师
  38. 11 2018 姜明壮 土建学院 岩土JD 法学社会学院 社会工作
  39. 14 2018 李纪星 土建学院 给排水 土建学院 土木卓越工程师
  40. 20 2018 刘传回 土建学院 工程 土建学院 土木卓越工程师
  41. 32 2018 赵栩晨 土建学院 给排水 土建学院 土木卓越工程师
  42. 33 2018 郑海清 土建学院 工程 土建学院 土木卓越工程师
  43. 47 2019 曾泓力 土建学院 土木类 信息学院 电子信息类(工学)
  44. 73 2019 陈溢语 土建学院 土木类 土建学院 建筑类
  45. 77 2019 陈展鹏 土建学院 土木类 汽车学院 机械类(车辆)
  46. 外语学院
  47. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  48. 21 2018 马文昌 外语学院 英语 土建学院 建筑环境
  49. 22 2018 马文轩 外语学院 英语 土建学院 建筑环境
  50. 48 2019 曾子良 外语学院 外语类 经济学院 经济
  51. 65 2019 陈鹏航 外语学院 外语类 法学社会学院 法学(余)
  52. 机电学院
  53. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  54. 13 2018 李昊明 机电学院 包装 机电学院 机自
  55. 30 2018 张广晖 机电学院 测控卓越工程师 管理学院 信管
  56. 42 2019 蔡睿哲 机电学院 测控 信息学院 电子信息类(工学)
  57. 56 2019 陈昊轩 机电学院 机械类(机电) 信息学院 电子信息类(工学)
  58. 62 2019 陈亮霓 机电学院 包装 机电学院 智能制造
  59. 63 2019 陈吕龙 机电学院 包装 机电学院 测控
  60. 66 2019 陈仁奎 机电学院 包装 汽车学院 机械类(车辆)
  61. 68 2019 陈涛 机电学院 机械类(机电) 计算机学院 计算机类
  62. 72 2019 陈旭涵 机电学院 机械类(机电) 艺设学院 工设g(艺)
  63. 74 2019 陈迎盈 机电学院 包装 机电学院 工业gc
  64. 76 2019 陈昱超 机电学院 机械类(机电) 信息学院 电子信息类(工学)
  65. 81 2019 陈宗泽 机电学院 机械类(机电) 理学院 数学类
  66. 材料学院
  67. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  68. 1 2017 戴兆晖 材料学院 材科 外语学院 英语
  69. 45 2019 曾保 材料学院 材料类 计算机学院 计算机类(余)
  70. 67 2019 陈荣 材料学院 材料成型及控制工程 管理学院 信管
  71. 99 2019 丁睿 材料学院 材料类 理学院 电子信息类(理学)
  72. 材料示范学院
  73. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  74. 94 2019 邓文浩 材料示范学院 材科(试点) 土建学院 土木类
  75. 汽车学院
  76. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  77. 0 2017 林海琳 汽车学院 能源 汽车学院 汽车服务
  78. 15 2018 李龙健 汽车学院 能源 经济学院 金融
  79. 82 2019 谌永康 汽车学院 机械类(车辆) 管理学院 工商管理类
  80. 89 2019 崔瀛 汽车学院 机械类(车辆) 材料学院 材料类
  81. 法学社会学院
  82. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  83. 34 2018 周嘉文 法学社会学院 编辑出版 法学社会学院 广告学
  84. 51 2019 陈晨 法学社会学院 教育技术(余) 理学院 电子信息类(理学)
  85. 54 2019 陈发明 法学社会学院 社会工作 经济学院 经济
  86. 95 2019 邓雯琦 法学社会学院 社会工作 外语学院 外语类
  87. 96 2019 地力热巴·吾斯曼 法学社会学院 社会工作 法学社会学院 法学(余)
  88. 物流学院
  89. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  90. 52 2019 陈诚 物流学院 物流管理与工程类 理学院 数学类
  91. 53 2019 陈定聪 物流学院 物流管理与工程类 经济学院 金融
  92. 83 2019 程蕾雅 物流学院 物流管理与工程类 计算机学院 计算机类(余)
  93. 理学院
  94. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  95. 12 2018 柯筱婧 理学院 信计 法学社会学院 编辑出版
  96. 16 2018 李怡晗 理学院 光信科 艺设学院 设计学类
  97. 38 2019 巴玉宁 理学院 电子信息类(理学) 法学社会学院 社会工作
  98. 86 2019 程先泽 理学院 电子信息类(理学) 材料学院 材料类
  99. 92 2019 邓灿 理学院 电子信息类(理学) 信息学院 电子信息类(工学)
  100. 管理学院
  101. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  102. 18 2018 廖睿偲 管理学院 工商管理类 国教学院 金融gj
  103. 26 2018 王婧婷 管理学院 工商 法学社会学院 法学(余)
  104. 27 2018 王艳 管理学院 营销 管理学院 会计
  105. 31 2018 张景 管理学院 人力资源管理 法学社会学院 法学(余)
  106. 46 2019 曾晗东 管理学院 工商管理类 汽车学院 机械类(车辆)
  107. 49 2019 查涛 管理学院 信管 机电学院 机械类(机电)
  108. 59 2019 陈佳艺 管理学院 信管 化生学院 生物技术
  109. 85 2019 程诗雪 管理学院 工商管理类 信息学院 电子信息类(工学)
  110. 93 2019 邓松矗 管理学院 工商管理类 信息学院 电子信息类(工学)
  111. 经济学院
  112. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  113. 2 2017 彭禹钧 经济学院 经济(创业试点) 法学社会学院 法学(余)
  114. 61 2019 陈丽 经济学院 经济(创业试点) 经济学院 经济
  115. 78 2019 陈至晟 经济学院 经济 机电学院 测控
  116. 能动学院
  117. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  118. 87 2019 程宇 能动学院 能源(余) 自动化学院 自动化
  119. 98 2019 丁灏楠 能动学院 能源(余) 信息学院 电子信息类(工学)
  120. 自动化学院
  121. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  122. 69 2019 陈文博 自动化学院 电气 自动化学院 自动化
  123. 航运学院
  124. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  125. 25 2018 覃启祥 航运学院 海事管理(余) 机电学院 机自
  126. 70 2019 陈文俊 航运学院 海事管理(余) 机电学院 机械类(机电)
  127. 80 2019 陈梓萱 航运学院 海事管理(余) 信息学院 电子信息类(工学)
  128. 88 2019 程雨凡 航运学院 海事管理(余) 汽车学院 机械类(车辆)
  129. 计算机学院
  130. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  131. 3 2018 白鲤 计算机学院 计算机卓越工程师 法学社会学院 社会工作
  132. 资环学院
  133. 年级 姓名 性别 原学院 原专业 现转入学院 现转入专业
  134. 9 2018 冯新航 资环学院 采矿工程 资环学院 地理信息
  135. 40 2019 蔡成宇 资环学院 矿业类 信息学院 电子信息类(工学)
  136. 41 2019 蔡璐 资环学院 矿业类 资环学院 环境科学与工程类
  137. 43 2019 曹霖 资环学院 环境科学与工程类 机电学院 机械类(机电)
  138. 55 2019 陈郭枭 资环学院 矿业类 管理学院 信管
  139. 64 2019 陈梦蝶 资环学院 矿业类 理学院 数学类
  140. 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)

image.png