将python中的ffill作为链接方法和参数之间有什么区别?

用户名

假设我们正在尝试按列表重新索引数据框,如下所示:

dataframe.reindex(list)

确切的数据框和列表并不重要。

现在,如果列表大于原始索引,将出现一些NaN。我的问题是,是否要通过正向填充来填充NaN,以下两种方式之间有什么区别:

dataframe.reindex(list, method='ffill')

dataframe.reindex(list).ffill()

我尝试了几次,发现结果不同。

说我们有数据框是:

Jan   1  
Apr   2  
Jul   3  
Oct   4  

列表是:
list = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov' ,'Dec']

所以,

dataframe.reindex(list, method='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  

鉴于,

dataframe.reindex(list).ffill()

变成:

Jan   1  
Feb   1  
Mar   1  
Apr   2  
May   2  
Jun   2  
Jul   3  
Aug   3  
Sep   3  
Oct   4  
Nov   4  
Dec   4 

我不知道这两种方式有何不同?第一种方式会产生什么,第二种方式会产生什么?

我试图查找文档和其他资源,但找不到解释。首先十分感谢。

耶斯列尔

编辑:

在版本pandas 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:索引必须单调递增或递减

并且在文档中- DataFrame.reindex

方法:{None,'backfill'/'bfill','pad'/'ffill','nearest'}
用于在重新索引的DataFrame中填充孔的方法。请注意:这仅适用于具有单调递增/递减索引的DataFrames / Series。

无(默认):不填充空白填充/填充:将最后一个有效观察向前传播到下一个有效回填/填充:使用下一个有效观察填充最近的空白:使用最近的有效观察填充空白

第二工作不错:

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

注意-不要使用listlike变量,因为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创建了chain,则缺少值,并且Series的所有数据都正向填充:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建新模型和视图或将模型作为方法参数传递之间有什么区别

Java泛型方法和作为参数的方法对象之间有什么区别?

使用Python层时,Caffe Blob中的`num`和`count`参数之间有什么区别?

创建实例和将其作为参数传递与在参数内部创建实例之间有什么区别?

Qt中的插槽和方法之间有什么区别?

后缀链接和失败链接之间有什么区别?

Python中的模块和库之间有什么区别?

python中“ append”和“ +”之间有什么区别?

在Python中,“。append()”和“ + = []”之间有什么区别?

在Python中,传递和返回之间有什么区别

python中的[无]和[]之间有什么区别?

在 Python 中 if not myList 和 if myList is [] 之间有什么区别?

$ this-> getRequest()和在Symfony 2中将Request作为参数传递之间有什么区别

Python 3中的“函数”,“方法”和“绑定方法”之间有什么区别?

关系元参数与链接箭头之间有什么区别?

将void作为参数传递与不将其传递给函数之间有什么区别?

程序参数和VM参数之间有什么区别?

框架的“导入”和与框架的“链接”之间有什么区别?

通过GCC和LD链接之间有什么区别?

torrent文件和Magnet链接之间有什么区别?

将函数的引用和 lambda 表达式作为参数传递时有什么区别?

将类作为最终类和将类构造函数作为私有之间有什么区别

python中对象的方法和属性有什么区别?

python中的@instance和@static方法有什么区别?

传递参数()=> T和T之间有什么区别

操作参数和GraphQL变量之间有什么区别?

参数和输入之间有什么区别?

在C ++中,“ C”函数和“ C”链接之间有什么区别?

方法接收者和参数之间有什么区别?