pandas的reindex的用法

1.**reindex()**表示重新索引,如果某个索引值当前不存在,就会引入
缺失值;可以通过fill_value参数填充默认值,也可以通过method参数设置填充方法;
reindex方法的methon参数的选项:
ffill或pad 前向填充值
bfill或backfill 后向填充值
或者是fill_value直接指定缺失值为多少
例子:

import  pandas as pd
import numpy as np
data=pd.DataFrame(np.random.randn(4,3),columns=['a','b','c'],index=['a','b','c','d'])
data

结果:

a	b	c
a	1.138053	2.017905	-1.007555
b	0.491705	-0.689641	0.955129
c	0.148272	1.493732	-0.211838
d	-0.619931	1.650868	1.794933

用reindex方法重新索引

data.reindex(['b','c','d','e','a'])

结果

	a	b	c
b	0.491705	-0.689641	0.955129
c	0.148272	1.493732	-0.211838
d	-0.619931	1.650868	1.794933
e	NaN             NaN	        NaN
a	1.138053	2.017905	-1.007555

用method方法设置缺失值

data.reindex(['b','c','d','e','a'],method='ffill')

结果:

a	b	c
b	0.491705	-0.689641	0.955129
c	0.148272	1.493732	-0.211838
d	-0.619931	1.650868	1.794933
e	-0.619931	1.650868	1.794933
a	1.138053	2.017905	-1.007555

也可以对列进行reindex

data.reindex(columns=['b','c','d','e','a'])
#或者如下
data.reindex(['b','c','d','e','a'],axis='columns')

结果:

b	c	d	e	a
a	2.017905	-1.007555	NaN	NaN	1.138053
b	-0.689641	0.955129	NaN	NaN	0.491705
c	1.493732	-0.211838	NaN	NaN	0.148272
d	1.650868	1.794933	NaN	NaN	-0.619931

对于缺失值的处理可以用同样的method或者是fill_value填充缺失值。
对于Series的reindex的处理方式也是一样的。

s=pd.Series(np.arange(0,6),index=[np.arange(1,7)])
s.reindex([2,5,6,9,10,3])
s.reindex([2,5,6,9,10,3],method='bfill')

思路是一样的。
2. 我们再来看看DataFrame.set_index,DataFrame.reset_index,DataFrame.reindex_like的用法
(1)DataFrame.set_index设置行标签,表示用已经存在的列或者是数组设置行标签。
例子:

df = pd.DataFrame({'month': [1, 4, 7, 10],
                    'year': [2012, 2014, 2013, 2014],
                    'sale': [55, 40, 84, 31]})
df

结果:

	month	sale	year
0	1	55	2012
1	4	40	2014
2	7	84	2013
3	10	31	2014

在执行:

df.set_index(['month','year'])

结果:

	             sale
month	year	
1	2012    	55
4	2014    	 40
7	2013	     84
10	2014    	31

或者:

s = pd.Series([1, 2, 3, 4])
df.set_index([s, s**2])

结果:

	month	sale	year
1	1	1	55	2012
2	4	4	40	2014
3	9	7	84	2013
4	16	10	31	2014

(2)DataFrame.reset_index
reset_index可以还原索引,重新变为默认的整型索引
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)
level控制了具体要还原的那个等级的索引
drop为False则索引列会被还原为普通列,否则会丢失
例子:

df = pd.DataFrame([('bird', 389.0),
                  ('bird', 24.0),
                  ('mammal', 80.5),
                    ('mammal', np.nan)],
                   index=['falcon', 'parrot', 'lion', 'monkey'],
                   columns=('class', 'max_speed'))
df

结果:``

        class	max_speed
falcon	bird	389.0
parrot	bird	24.0
lion	mammal	80.5
monkey	mammal	NaN

接着:

df.reset_index()#当reset_index()执行时,原来的index会增加到dataframe中的一列

结果:

   index	class	max_speed
0	falcon	bird	389.0
1	parrot	bird	24.0
2	lion	mammal	80.5
3	monkey	mammal	NaN

再有:

df.reset_index(drop=True)#表示将原来的index列删除

结果:

   class 	max_speed
0	bird	389.0
1	bird	24.0
2	mammal	80.5
3	mammal	NaN

对于多层的index的dataframe可以参考官方文档pandas官网
(3)DataFrame.reindex_like,返回与其他对象具有匹配索引的对象。
例子:

df1 = pd.DataFrame([[24.3, 75.7, 'high'],
                    [31, 87.8, 'high'],
                    [22, 71.6, 'medium'],
                     [35, 95, 'medium']],
     columns=['temp_celsius', 'temp_fahrenheit', 'windspeed'],
     index=pd.date_range(start='2014-02-12',
                         end='2014-02-15', freq='D'))
df1

结果:

         temp_celsius	temp_fahrenheit	windspeed
2014-02-12	24.3	75.7	high
2014-02-13	31.0	87.8	high
2014-02-14	22.0	71.6	medium
2014-02-15	35.0	95.0	medium
df2 = pd.DataFrame([[28, 'low'],
                     [30, 'low'],
                     [35.1, 'medium']],
     columns=['temp_celsius', 'windspeed'],
    index=pd.DatetimeIndex(['2014-02-12', '2014-02-13',
                             '2014-02-15']))
df2

结果:

	temp_celsius	windspeed
2014-02-12	28.0	low
2014-02-13	30.0	low
2014-02-15	35.1	medium

执行:

df2.reindex_like(df1)

结果:

	temp_celsius	temp_fahrenheit	windspeed
2014-02-12	28.0	NaN	low
2014-02-13	30.0	NaN	low
2014-02-14	NaN	NaN	NaN
2014-02-15	35.1	NaN	medium

注意在结果中的索引值以及列都与df1匹配,对于df2中不存在就显示缺失值。

你可能感兴趣的:(pandas的reindex的用法)