pandas.Series.reindex¶
-
Series.
reindex
(index=None, **kwargs)[source]¶ 使用可选填充逻辑将系列更新为新索引,将NA / NaN放在前一个索引中没有值的位置。将生成一个新对象,除非新索引等效于当前对象并且copy = False
参数: index:array-like,可选(可以按顺序指定或as
关键字)新标签/索引符合。优选地,Index对象用于避免重复数据
方法:{None,'backfill'/'bfill','pad'/'ffill','nearest'}
方法用于在重建索引的DataFrame中填充空洞。请注意:这仅适用于具有单调递增/递减索引的DataFrames / Series。
- 默认:不填充间隙
- pad / ffill:将最后有效观察向前传播到下一个有效
- backfill / bfill:使用下一个有效的观察填充间隙
- 最近:使用最接近的有效观察值填充间隙
copy:boolean,default True
返回一个新对象,即使传递的索引是相同的
level:int或name
跨级别广播,匹配传递的MultiIndex级别上的索引值
fill_value:scalar,default np.NaN
缺失值使用的值。默认为NaN,但可以是任何“兼容”值
limit:int,默认值无
向前或向后填充的连续元素的最大数量
公差:可选
不完全匹配的原始和新标签之间的最大距离。匹配位置处的索引的值最满足等式
abs(index [indexer] - target) ; = tolerance
。版本0.17.0中的新功能。
返回: 重新编制索引:系列
例子
使用一些虚构数据创建数据帧。
>>> index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror'] >>> df = pd.DataFrame({ ... 'http_status': [200,200,404,404,301], ... 'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]}, ... index=index) >>> df http_status response_time Firefox 200 0.04 Chrome 200 0.02 Safari 404 0.07 IE10 404 0.08 Konqueror 301 1.00
创建一个新索引并重新索引数据帧。缺省情况下,新索引中在数据帧中没有对应记录的值分配为
NaN
。>>> new_index= ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10', ... 'Chrome'] >>> df.reindex(new_index) http_status response_time Safari 404 0.07 Iceweasel NaN NaN Comodo Dragon NaN NaN IE10 404 0.08 Chrome 200 0.02
我们可以通过向关键字
fill_value
传递值来填充缺少的值。由于索引不是单调递增或递减,因此我们不能使用关键字method
的参数来填充NaN
值。>>> df.reindex(new_index, fill_value=0) http_status response_time Safari 404 0.07 Iceweasel 0 0.00 Comodo Dragon 0 0.00 IE10 404 0.08 Chrome 200 0.02
>>> df.reindex(new_index, fill_value='missing') http_status response_time Safari 404 0.07 Iceweasel missing missing Comodo Dragon missing missing IE10 404 0.08 Chrome 200 0.02
为了进一步说明
reindex
中的填充功能,我们将创建一个具有单调递增索引的数据帧(例如,一个日期序列)。>>> date_index = pd.date_range('1/1/2010', periods=6, freq='D') >>> df2 = pd.DataFrame({"prices": [100, 101, np.nan, 100, 89, 88]}, ... index=date_index) >>> df2 prices 2010-01-01 100 2010-01-02 101 2010-01-03 NaN 2010-01-04 100 2010-01-05 89 2010-01-06 88
假设我们决定扩展数据框以涵盖更广泛的日期范围。
>>> date_index2 = pd.date_range('12/29/2009', periods=10, freq='D') >>> df2.reindex(date_index2) prices 2009-12-29 NaN 2009-12-30 NaN 2009-12-31 NaN 2010-01-01 100 2010-01-02 101 2010-01-03 NaN 2010-01-04 100 2010-01-05 89 2010-01-06 88 2010-01-07 NaN
默认情况下,原始数据帧中没有值的索引条目(例如,“2009-12-29”)用
NaN
填充。如果需要,我们可以使用几个选项之一填写缺少的值。例如,要反向传播最后一个有效值以填充
NaN
值,请将bfill
作为参数传递给method
关键字。>>> df2.reindex(date_index2, method='bfill') prices 2009-12-29 100 2009-12-30 100 2009-12-31 100 2010-01-01 100 2010-01-02 101 2010-01-03 NaN 2010-01-04 100 2010-01-05 89 2010-01-06 88 2010-01-07 NaN
请注意,原始数据帧(索引值2010-01-03)中存在的
NaN
值不会由任何值传播方案填充。这是因为在重建索引时填充不会查看数据帧值,而只会比较原始和所需的索引。如果您想要填写原始数据帧中存在的NaN
值,请使用fillna()
方法。