本系列课程适用人群:
- python零基础数据分析的朋友;
- 在校学生;
- 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友;
- 喜欢图表可视化的朋友;
系列视频目前可在B站观看,会定期更新,欢迎大家吐槽!
本节概要:看excel中最强大的数据透视表在python中如何实现
视频地址:python中数据透视表
<iframe allowfullscreen="true" data-mediaembed="bilibili" id="ZdHGbA3p-1607750296132" src="https://player.bilibili.com/player.html?aid=713112364"></iframe>本节代码:
import pandas as pd
import numpy as np
import os
os.chdir('D:/python/课件/data/gaokaodata/')
# =============================================================================
# 批量读取数据
# =============================================================================
# 此数据由和鲸社区整理:https://www.kesci.com/mw/project/5efff5de63975d002c98fc28/dataset
# 获取文件夹相关信息,os.walk()方法返回3个结果,其中files最终要。root, dirs, files只是自定义的变量名称,可写成别的名
for root, dirs, files in os.walk('.'):
print(files)
# 定义一个空的dataframe,读取的每个表中的数据都添加到此变量中
data = pd.DataFrame()
for i in files: # 依次读取files文件中的元素
# 读取第i个文件,"."为上面设置的默认路径,i为文件名称。组合在一起正好为文件路径
datai = pd.read_csv('./' + i)
# 计算文件行数
datai_len = len(datai)
# 读取的文件添加到data变量中
data = data.append(datai) # 添加到总的数据中
# print中格式化写法。%i表示此处为一整数,整数的值为引号外面%后面的变量,按顺序获取。其他写法 %s:字符串 %f:小数
print('文件%i列, 读取%i行数据,名称:%s'%(len(datai.columns),datai_len,i))
# =============================================================================
# 数据透视表
# =============================================================================
'''
pivot_table(values=None, # 计算的统计量,values可以不用写
index=None, # 行变量
columns=None, # 列字典
aggfunc='mean', #计算的统计量,可以写成 'sum' 或者 np.sum 两种形式
fill_value=None, # 缺失值的显示方式
margins=False, # 是否显示合计行、合计列,False为不显示
dropna=True, # 不计算全部为缺失值的列,不常用
margins_name='All', # 合计行、列的名称,默认为英文单词ALL,可改为"合计","总计"等
observed=False) # 仅适用于分类索引的,不常用
'''
# 在spyder中查函数的帮助文件 ★★★★★
help(data.pivot_table) # pivot_table后面没有括号
# 每个地区的分数线
result1 = data.pivot_table('分数线',
index='地区',
aggfunc='mean').sort_values(by='分数线',ascending=False)
# 每个地区,不同年份的分数线
result2 = data.pivot_table('分数线',
index='地区',
columns='年份',
aggfunc='mean',
margins=True).round(0)
# 不同地区,不同考生类别、不同年份的分数线
result3 = data.pivot_table('分数线',
index=['地区','考生类别'],
columns='年份',
fill_value=None,
aggfunc='mean',
margins=True).round(0)
# 对同一变量计算多个统计量
result4 = data.pivot_table('分数线',
index='地区',
aggfunc=['mean','max','min','std']).round(0)
# 对不同的变量计算不同的统计量
result5 = data.pivot_table(index='地区',
aggfunc={'分数线':np.mean, '批次':'count'}).round(0)
# =============================================================================
# 导入excel
# =============================================================================
result3.to_excel('D:/python/课件/结果/高考成绩.xlsx')