python中的ffill作为链式方法和作为参数有什么区别?
假设我们正试图通过如下列表对数据帧重新编制索引:python中的ffill作为链式方法和作为参数有什么区别?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,假设我们正试图通过如下列表对数据帧重新编制索引: dataframe.reindex(list) 其中确切的数据帧和列表并不重要 现在,如果列表大于原始索引,则会出现一些NaN。我的问题是,如果我想通过正向填充来填充NAN,以下两种方法的区别是什么: dataframe.reindex(list, method='ffill') dataframe.reindex(list).ffill() 我试了几次,发现结果不一样 假设我们有数据帧: Jan 1 Apr 2 Jul
dataframe.reindex(list)
其中确切的数据帧和列表并不重要
现在,如果列表大于原始索引,则会出现一些NaN。我的问题是,如果我想通过正向填充来填充NAN,以下两种方法的区别是什么:
dataframe.reindex(list, method='ffill')
dataframe.reindex(list).ffill()
我试了几次,发现结果不一样
假设我们有数据帧:
Jan 1
Apr 2
Jul 3
Oct 4
列表是:列表=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'] 所以 变成:
Jan 1
Feb 2
Mar 3
Apr 2
May 3
Jun 3
Jul 3
Aug 2
Sep 4
Oct 4
Nov 3
Dec 2
Jan 1
Feb 1
Mar 1
Apr 2
May 2
Jun 2
Jul 3
Aug 3
Sep 3
Oct 4
Nov 4
Dec 4
鉴于
dataframe.reindex(list).ffill()
变成:
Jan 1
Feb 2
Mar 3
Apr 2
May 3
Jun 3
Jul 3
Aug 2
Sep 4
Oct 4
Nov 3
Dec 2
Jan 1
Feb 1
Mar 1
Apr 2
May 2
Jun 2
Jul 3
Aug 3
Sep 3
Oct 4
Nov 4
Dec 4
我想不出这两种方式有什么不同?第一种方法会产生什么,第二种方法会产生什么
我试图查找文档和其他来源,但找不到解释。非常感谢。编辑:
版本0.24.1中出现错误:
print (dataframe)
Col
Jan 1
Apr 2
Jul 3
Oct 4
print (dataframe.index.is_monotonic_increasing)
False
L = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
print (dataframe.reindex(L, method='ffill'))
ValueError:索引必须是单调递增或递减的
在文档中-:
方法:{None,'回填'/'bfill',pad'/'ffill','最近'}用于填充重新编制索引的数据帧中的孔的方法。请注意:这仅适用于索引单调递增/递减的数据帧/系列 无(默认):不填充间隙 pad/ffill:将上一个有效观察向前传播到下一个有效观察 回填/填充:使用下一个有效观测值填充间隙 最近的:使用最近的有效观测值来填充间隙 第二个工作很好:
print (dataframe.reindex(L).ffill())
Col
Jan 1.0
Feb 1.0
Mar 1.0
Apr 2.0
May 2.0
Jun 2.0
Jul 3.0
Aug 3.0
Sep 3.0
Oct 4.0
Nov 4.0
Dec 4.0
注意-不要像变量一样使用
list
,因为python保留字(内置)
不同之处在于,如果在reindex
之前的列中缺少值:
dataframe = pd.DataFrame({'col':[0,2,np.nan,5,np.nan]}, index=[1,3,5,6,8])
print (dataframe)
col
1 0.0
3 2.0
5 NaN
6 5.0
8 NaN
print (dataframe.index.is_monotonic_increasing)
True
如果使用参数,则只向前填充添加的行,此处为1,4,7行
如果链ffill
则创建缺少的值,并且序列的所有数据都是正向填充:
L = range(10)
df = pd.concat([dataframe.reindex(L, method='ffill'),
dataframe.reindex(L),
dataframe.reindex(L).ffill()],
keys=('parameter','only_reindex','chained'), axis=1)
print (df)
parameter only_reindex chained
col col col
0 NaN NaN NaN
1 0.0 0.0 0.0
2 0.0 NaN 0.0
3 2.0 2.0 2.0
4 2.0 NaN 2.0
5 NaN NaN 2.0
6 5.0 5.0 5.0
7 5.0 NaN 5.0
8 NaN NaN 5.0
9 NaN NaN 5.0
如果没有缺失值,则结果相同:
dataframe = pd.DataFrame({'col':[0,2,8,5,9]}, index=[1,3,5,6,8])
print (dataframe)
col
1 0
3 2
5 8
6 5
8 9
print (dataframe.index.is_monotonic_increasing)
True
L = range(10)
df = pd.concat([dataframe.reindex(L, method='ffill'),
dataframe.reindex(L),
dataframe.reindex(L).ffill()],
keys=('parameter','only_reindex','chained'), axis=1)
print (df)
parameter only_reindex chained
col col col
0 NaN NaN NaN
1 0.0 0.0 0.0
2 0.0 NaN 0.0
3 2.0 2.0 2.0
4 2.0 NaN 2.0
5 8.0 8.0 8.0
6 5.0 5.0 5.0
7 5.0 NaN 5.0
8 9.0 9.0 9.0
9 9.0 NaN 9.0
我试了几次,发现结果不一样。
-你能添加一些不同的数据吗?谢谢你的评论,我添加了一些数据@jezrael。你的熊猫版本是什么?在一些较低版本中,print(dataframe.reindex(L,method='ffill'))
似乎有缺陷。