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

时间:2017-04-17 16:19:34

标签: python pandas

可以填写函数吗?或者只是方法'回填','bfill'等等?

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

如果数据帧没有任何初始数据,例如,回填方法是没用的不是吗?如果数据帧结束时没有数据,则反之亦然。

这就是为什么我想使用像推断这样的正确方法

的一些原因

2 个答案:

答案 0 :(得分:1)

简答:

不,fillna不能使用函数,只能使用方法。

简短回答:

有一个df.interpolate函数可以让你使用不同的插值技术填充。

答案很长:

您可以参考the answer here,其中有人概述了使用scipy推断数据的方法。不幸的是,没有原生的熊猫功能来实现这一目标):

答案 1 :(得分:1)

onChange={this.handleChange} 旨在使fillna填充,或使用其中一种方法value

From the docs you referenced

  

标量,字典,系列或DataFrame

     

用于填充孔的值(例如0),或者用于指定每个索引(对于Series)或列(对于DataFrame)使用哪个值的值的Dict / Series / DataFrame。 (不会填写dict / Series / DataFrame中的值)。该值不能是列表。

回答

*{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}*不会将函数作为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

填写字典

df.fillna(9)

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

填写系列

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 生成df.fillna(filler, axis=1)

NotImplementedError