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