Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的ffill作为链式方法和作为参数有什么区别?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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'))
似乎有缺陷。