利用 Python 生成数据透视表

简介

  • 利用 read_excel()usecols 参数来指定表的某一列,以方便排除不必要的干扰列
  • 养成数据加载以后,使用 head() 进行预览的习惯
  • 养成使用 shape()info() 了解表格基本情况的习惯

利用 info() 方法查看数据中是否有空值,如果有空值的话,则可以使用 dropna() 方法将其移除。

需要掌握的主要有两个方法:

  • DataFrame.insert() 方法,用来增加对应的列
  • DataFrame.pivot_table() 产生透视图,展示重要的数据

具体方法

  • DataFrame.insert(self, loc, column, value, allow_duplicates=False)

loc : int 表示第几列;0 <= loc <= len(columns) column : string, number, or hashable object;给插入的列取名,如 column='新的一列' value : int ,array,series allow_duplicates : bool 是否允许列名重复,选择 True 表示允许新的列名与已存在的列名重复。

  • DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

values : 要进行透视展示的数据 index : 需要重新进行展示成列,是原始数据中的某一个行 columns : 要重新展示为行的内容,是原来的列或者是其它的属性,可以是列表 aggfunc : 要进行统计的行,可以是 numpy.sum / numpy.mean 等,也可以按列进行统计 aggfunc={'c1' : numpy.mean, 'c2' : numpy.sum} fill_value : 将缺失值替换的值,幽灵将 Nan 换成 0 : fill_value=0 margins : bool, 增加行或者列的汇总信息 dropna : bool ,是否要删除为空的信息 margin_name : string , 默认为 all ,或者自定义一个名称 observed bool , True 显示分类中的数据,False 显示所有数据,默认为 False

示例代码

import pandas as pd
from datetime import datetime

data = pd.read_excel(r'python_learning.xlsx',
                     usecols=[1, 4, 6, 7, 8, 9, 10, 11, 12], sheet_name='sheetName')
data = data[data['合同生效日'] > datetime(2018, 12, 31)]

# 按逻辑,将一组数据拆成三组
data1 = data[["used", "loan amount", "company1", "percent1"]]
data2 = data[["used", "loan amount", "company2", "percent2"]]
data3 = data[["used", "loan amount", "company3", "percent3"]]

# 将三组内容,重新命名之后合成一个新表
data1 = data1.rename(columns={"company1": "company", "percent1": "percent"})
data2 = data2.rename(columns={"company2": "company", "percent2": "percent"})
data3 = data3.rename(columns={"company3": "company", "percent3": "percent"})

data4 = pd.concat([data1, data2, data3], ignore_index=True)

# 将数据中的空值清除
data4 = data4.dropna()

# 插入新的数据
# 1. insert() 方法
data4.insert(2, "devide percent", data4["percent"]/100)
data4.insert(5, "devide amount", data4["loan amount"]*data4["deivide percent"]/10000, False)

# 普通索引方式插入
# data4["loan divide amount"] = data4["load amount"]*data4["deivide percent"]/10000

# 增加数据透视
data5 = data4[['company', 'used', 'loan amount']]
data6 = pd.pivot_table(data5, values="loan divide amount", columns="used", index="company",
                       aggfunc='sum', fill_value=0, observed=False).reset_index()
print(data6.head())
Author
Tags
总结(3) Emacs(2) org mode(4) 年度清单(2) 读书清单(2) 电影清单(2) 电视清单(2) Python(3) 学习计划(1) 子弹笔记(1) 手帐体系(1) 时间管理(1) 时间使用效率(1) 形意拳(1) 知识管理(1) 简历(1) 技能水平(1) 生活(1) 减法生活(1) 阅读(1) 阅读分组(1) org(1) docx(1) markdown(2) cmder(1) 图床(1) jsdelivr(1) github(1) 安卓系统(1) 手动更新手机系统(1) post link(1) post path(1) hexo(2) hugo(2) GitHub Pages(1) travis(1) 自动部署博客(1) presentation(1) gcc(1) g++(1) 默认表格(1) 复杂表格(1) multimd table(1) google adsense(1) evil(1) surround(1) librime(2) emacs-rime(1) liberime(1) dot(1) graphviz(1) use-sub-superscripts(1) ditaa(1) Evil Multiple cursors(1) turn evil mode off(1) modifier keys(1) keymap(1) super(1) hyper(1) install Emacs(1) Mac OS(1) keybinds(1) clocktable(1) coding system(1) image library(1) keybind(1) spacemacs(1) org babel(1) homebrew(1) dd(1) diskutil(1) tmux(1) xcode(1) xcrun(1) node-gyp(1) tar(1) tree(1) pacman(1) plantuml(1) find(1) grep(2) du(1) apt-get(1) apt(1) regex(1) wildcard(1) zsh(1) gdb(1) lsof(1) netstat(1) rebase(2) workflow(1) 工作流(1) .gitignore(1) postbuffer(1) hung up(1) merge(1) cache(1) reset(1) Git(1) command(1) submodule(1) GitHub Pull Request(1) pr(1) Matplotlib(1) beautifusoup(1) 下载小说(1) SOLID(1) Leetcode(2) 透视表(1) read_excel()(1) pandas(1) conda(1) django(1) markdown-deux(1) mysql(1) oracle(1) 模糊查询(1) logging level(1) reflex(1) Field(1) Maven(1) Selenium(1) 下拉框(1) select into(1) insert into select(1) CAST(1) CONVERT(1) timestamp(1) concat(1) concat_ws(1) group_concat(1) union(1) grant privileges(1) 重置 root 密码(1) 报错 10060(1) 清理连接数(1) create user(1) set password(1) exists(1) in(1) markdown-it(1) emoji(1) tasks(1) valine(1) Code 504(1) Hugo(1) theme(1) substring(1) indexOf(1) RegExp(1) 定位节点(1) 正则匹配(1) async(1) 异步请求(1) css(2) layui(1) 滚动条(1) JavaScript(1)