fillna可以接受一个函数还是只接受给定的方法?

2024-03-29 07:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

菲娜能接受函数吗?或者只是“回填”、“bfill”等方法?在

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

例如,如果dataframe没有任何初始数据,那么回填方法就没有用了,不是吗?如果在数据帧的末尾没有数据,则返回VICEVSA ffill。在

这就是我为什么要用外推法这样的恰当方法的原因


Tags: 数据方法函数orghttpdocsdataframepandas
2条回答

fillna打算使用value填充,或者使用*{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}*方法之一

From the docs you referenced

value : scalar, dict, Series, or DataFrame

Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). (values not in the dict/Series/DataFrame will not be filled). This value cannot be a list.

回答

fillna不接受函数作为value参数的有效输入。但是,如果您有一个可以生成序列或数据帧的函数,那么您可以将所需的任何输入传递给该函数,并将结果传递给fillna


示例

value参数可以采用标量、字典、序列或数据帧。下面是一些看起来像什么的例子

考虑数据帧df

df = pd.DataFrame([
        [1, None, 2, None],
        [None, 3, None, 4],
        [5, 6, None, None],
        [None, None, 7, 8]
    ], list('ABCD'), list('WXYZ'))

print(df)

     W    X    Y    Z
A  1.0  NaN  2.0  NaN
B  NaN  3.0  NaN  4.0
C  5.0  6.0  NaN  NaN
D  NaN  NaN  7.0  8.0

用标量填充

^{pr2}$

用字典填充

filler = dict(W=-9, X=-10, Y=-11, Z=-12)
df.fillna(filler)

     W     X     Y     Z
A  1.0 -10.0   2.0 -12.0
B -9.0   3.0 -11.0   4.0
C  5.0   6.0 -11.0 -12.0
D -9.0 -10.0   7.0   8.0

用系列填充

filler = pd.Series(dict(W=-9, X=-10, Y=-11, Z=-12))
df.fillna(filler)

     W     X     Y     Z
A  1.0 -10.0   2.0 -12.0
B -9.0   3.0 -11.0   4.0
C  5.0   6.0 -11.0 -12.0
D -9.0 -10.0   7.0   8.0

填充数据帧

filler = pd.DataFrame(-np.arange(df.size).reshape(df.shape), df.index, df.columns)
print(filler)

    W   X   Y   Z
A   0  -1  -2  -3
B  -4  -5  -6  -7
C  -8  -9 -10 -11
D -12 -13 -14 -15

df.fillna(filler)

     W     X     Y     Z
A  1.0 -10.0   2.0 -12.0
B -9.0   3.0 -11.0   4.0
C  5.0   6.0 -11.0 -12.0
D -9.0 -10.0   7.0   8.0

用along索引填充,您需要转置
df.fillna(filler, axis=1)生成NotImplementedError

filler = dict(A=-9, B=-10, C=-11, D=-12)
print(df.T.fillna(filler).T)

      W     X     Y     Z
A   1.0  -9.0   2.0  -9.0
B -10.0   3.0 -10.0   4.0
C   5.0   6.0 -11.0 -11.0
D -12.0 -12.0   7.0   8.0

简短回答:

不,fillna不能接受函数,只能接受方法。在

简短回答:

有一个df.interpolate函数,允许您使用不同的插值技术填充。在

长回答:

您可以参考the answer here,其中有人概述了使用scipy推断数据的方法。不幸的是,没有一个本地的熊猫功能来完成这一点):

相关问题 更多 >