本系列课程适用人群:

  1. python零基础数据分析的朋友;
  2. 在校学生;
  3. 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友;
  4. 喜欢图表可视化的朋友;

系列视频目前可在B站观看,会定期更新,欢迎大家吐槽!

本节概要:看excel中最强大的数据透视表在python中如何实现

视频地址:python中数据透视表

本节代码:

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')