博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用python做数据分析(六)-reindex
阅读量:6508 次
发布时间:2019-06-24

本文共 2705 字,大约阅读时间需要 9 分钟。

参考文档:

DataFrame.reindex(index=None, columns=None, **kwargs)

reindex 函数的参数

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

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

import pandas as pdobj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])objd    4.5b    7.2a   -5.3c    3.6dtype: float64

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

obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])obj2a   -5.3b    7.2c    3.6d    4.5e    NaNdtype: float64
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)a   -5.3b    7.2c    3.6d    4.5e    0.0dtype: 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      blue1      blue2    purple3    purple4    yellow5    yellowdtype: object

向后填充

obj3.reindex(range(6), method='bfill')0      blue1    purple2    purple3    yellow4    yellow5       NaNdtype: object

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

frame = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],columns=['Ohio', 'Texas', 'California'])frame    Ohio Texas  Californiaa   0   1   2c   3   4   5d   6   7   8
frame2 = frame.reindex(['a', 'b', 'c', 'd'])frame2    Ohio    Texas   Californiaa   0.0 1.0 2.0b   NaN NaN NaNc   3.0 4.0 5.0d   6.0 7.0 8.0

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

states = ['Texas', 'Utah', 'California']frame.reindex(columns=states)   Texas    Utah    Californiaa   1   NaN 2c   4   NaN 5d   7   NaN 8

此时的frame依然是原样

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

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

frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',columns=states)    Texas   Utah    Californiaa   1   NaN 2b   1   NaN 2c   4   NaN 5d   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.indexIndex(['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.columnsMultiIndex(levels=[['F', 'M'], [1910, 1960, 2010]],           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],           names=['sex', 'year'])

下一章讲MultiIndex

你可能感兴趣的文章
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
1.电子商务支付方式有哪些 2.比较不同支付方式的优势劣势
查看>>
医疗卫生系统被爆漏洞,7亿公民信息泄露……
查看>>
神秘函件引发的4G+与全网通的较量
查看>>
CloudCC:智能CRM究竟能否成为下一个行业风口?
查看>>
高德开放平台推出LBS游戏行业解决方案提供专业地图平台能力支持
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
中国人工智能学会通讯——融合经济学原理的个性化推荐 1.1 互联网经济系统的基本问题...
查看>>
盘点大数据商业智能的十大戒律
查看>>
戴尔为保护数据安全 推出新款服务器PowerEdge T30
查看>>
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>