当前位置: 首页 > news >正文

利用python做数据分析(六)-reindex

参考文档:http://pda.readthedocs.io/en/latest/chp5.html
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html

DataFrame.reindex(index=None, columns=None, **kwargs)
reindex 函数的参数

参数说明
method插值填充方法
fill_value引入的缺失数据值
limit填充间隙
copy如果新索引与就的相等则底层数据不会拷贝。默认为True(即始终拷贝)
level在多层索引上匹配简单索引

pandas的reindex对象,是数据符合新的索引来构造一个新的对象

import pandas as pd
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj

d    4.5
b    7.2
a   -5.3
c    3.6
dtype: float64

Series的reindex使它符合新的索引,如果索引的值不存在就填入缺失值

obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2

a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)

a   -5.3
b    7.2
c    3.6
d    4.5
e    0.0
dtype: float64

method选项来控制填充值或内插值:
method : {None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}, optional。
ffill/pad 向前或进位填充,bfill/backfill 向后或进位填充

obj3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill')

0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object

向后填充

obj3.reindex(range(6), method='bfill')
0      blue
1    purple
2    purple
3    yellow
4    yellow
5       NaN
dtype: object

对于DataFrame, reindex 可以改变(行)索引,列或两者。当只传入一个序列时,结果中的行被重新索引:

frame = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],columns=['Ohio', 'Texas', 'California'])
frame

    Ohio Texas  California
a   0   1   2
c   3   4   5
d   6   7   8
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2
    Ohio    Texas   California
a   0.0 1.0 2.0
b   NaN NaN NaN
c   3.0 4.0 5.0
d   6.0 7.0 8.0

使用column可以将列进行重新索引

states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)

   Texas    Utah    California
a   1   NaN 2
c   4   NaN 5
d   7   NaN 8

此时的frame依然是原样

frame
    Ohio    Texas   California
a   0   1   2
c   3   4   5
d   6   7   8

也可以同时读列和index进行reindex,可是插值只在行侧

frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',columns=states)

    Texas   Utah    California
a   1   NaN 2
b   1   NaN 2
c   4   NaN 5
d   7   NaN 8

level

关于level可能大家不太理解。level主要在多层索引上用到。举例:
继续之前的话题,我想看到新生儿名字中最后一位字母的变化.

get_last_letter=lambda x:x[-1]
last_letters=names.name.map(get_last_letter)
last_letters.name='last_letter'

table=pd.pivot_table(names,index=[last_letters],values='births',columns=['sex','year'],aggfunc=sum)
table

这里写图片描述

比如我想看其中三年的数据,改怎么办。

按照之前的做法,需要table[‘column name’],但是你会发现table[‘F’]或者table[‘M’]还行,但是还有一层column可怎么办。
正确做法如下:

subtable=table.reindex(columns=[1910,1960,2010],level='year')
subtable

这里写图片描述

请细细体会。

subtable.index

Index(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
       'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],
      dtype='object', name='last_letter')
In [7]:
subtable.columns

MultiIndex(levels=[['F', 'M'], [1910, 1960, 2010]],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
           names=['sex', 'year'])

下一章讲MultiIndex

相关文章:

  • GitHub 小试
  • Actor模式的弊端
  • 广告
  • 自学的IT程序员通常缺少哪些技能
  • IOS中获取各种文件的目录路径的方法
  • 怎么样抢注新域名
  • 北京实习面试总结,四天面试6个公司,有所收获。
  • 关于未来编程语言的预测
  • Spark Graphx编程指南
  • 找回HDFS corrupted文件残留数据
  • Oracle 执行计划(Explain Plan)
  • MSSQL2008-2012数据库的字段类型整理
  • Vector的一种实现(二)
  • 前端导出Excel兼容写法
  • 洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 乱搞
  • HTTP那些事
  • Koa2 之文件上传下载
  • Leetcode 27 Remove Element
  • mysql常用命令汇总
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 从伪并行的 Python 多线程说起
  • 关于Java中分层中遇到的一些问题
  • 事件委托的小应用
  • 数据结构java版之冒泡排序及优化
  • 一个SAP顾问在美国的这些年
  • 一些css基础学习笔记
  • ​如何防止网络攻击?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • !$boo在php中什么意思,php前戏
  • # C++之functional库用法整理
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)常见O(n^2)排序算法解析
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (循环依赖问题)学习spring的第九天
  • (转)3D模板阴影原理
  • (转)德国人的记事本
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .Net IOC框架入门之一 Unity
  • .NET 中创建支持集合初始化器的类型
  • .net6使用Sejil可视化日志
  • .net中调用windows performance记录性能信息
  • .net中生成excel后调整宽度
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell