gpt4 book ai didi

python - python 中的 ffill 作为链式方法和作为参数有什么区别?

转载 作者:行者123 更新时间:2023-12-01 08:20:06 24 4
gpt4 key购买 nike

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

dataframe.reindex(list)

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

现在,如果列表大于原始索引,就会出现一些 NaN。我的问题是,如果我想通过前向填充来填充 NaN,以下两种方法有什么区别:

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

dataframe.reindex(list).ffill()

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

假设我们的数据框是:

Jan   1  
Apr 2
Jul 3
Oct 4

列表是:
列表 = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]

所以,

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: index must be monotonic increasing or decreasing

在文档中 - DataFrame.reindex :

method : {None, 'backfill'/'bfill', 'pad'/'ffill', 'nearest'}
Method to use for filling holes in reindexed DataFrame. Please note: this is only applicable to DataFrames/Series with a monotonically increasing/decreasing index.

None (default): don't fill gaps pad / ffill: propagate last valid observation forward to next valid backfill / bfill: use next valid observation to fill gap nearest: use nearest valid observations to fill gap

第二次工作很好:

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 保留字(内置)。

区别在于在重新索引之前列中是否存在缺失值:

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则创建缺失值并且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

关于python - python 中的 ffill 作为链式方法和作为参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54703868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com