Python、Pandas ffill() 不适用于对象列

Python, Pandas ffill() does not work on object columns

这是示例数据帧:

data = np.matrix([[4,3,6,4,1,7,5,5], [1,2,3,6,4,2,4,9], ['a',np.nan, np.nan, 'b', np.nan, 'c', np.nan, 'd'],[1,np.nan, np.nan, 2, np.nan, 2, np.nan, 2]]).T
data = pd.DataFrame(data)

>>> data

   0  1    2    3
0  4  1    a    1
1  3  2  nan  nan
2  6  3  nan  nan
3  4  6    b    2
4  1  4  nan  nan
5  7  2    c    2
6  5  4  nan  nan
7  5  9    d    2

>>> data.dtypes

0    object
1    object
2    object
3    object
dtype: object

如您所见,某些列的 dtypesobject。他们不是 float,或 int

如果我在控制台中输入 data.ffill(),它不会执行任何操作。但是,如果我尝试 data[3] = data[3].astype(float).ffill()

它将 data 更改为:

   0  1    2    3
0  4  1    a  1.0
1  3  2  nan  1.0
2  6  3  nan  1.0
3  4  6    b  2.0
4  1  4  nan  2.0
5  7  2    c  2.0
6  5  4  nan  2.0
7  5  9    d  2.0

显然 pd.ffill() 仅适用于数字列,但不适用于字符串列。 data[2] = data[2].astype(str).ffill() 没有任何改变。如何使用 dtype=object 转发填充行?

这是我想要的输出:

   0  1    2    3
0  4  1    a  1.0
1  3  2    a  1.0
2  6  3    a  1.0
3  4  6    b  2.0
4  1  4    b  2.0
5  7  2    c  2.0

如果所有字符串都存储为 'nan',那么您可以在一行中填写整个 DataFrameNone 是可识别的适用于对象类型的空值。

data.mask(data=='nan', None).ffill()

#0    4    1    a    1
#1    3    2    a    1
#2    6    3    a    1
#3    4    6    b    2
#4    1    4    b    2
#5    7    2    c    2
#6    5    4    c    2
#7    5    9    d    2