以下是示例dataFrame:
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
如您所见,某些列的dtypes
为object
。它们不是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
答案 0 :(得分:1)
如果所有字符串都只是存储为'nan'
,那么您可以将整个DataFrame
填入一行。 None
是一个可识别的空值,适用于对象类型。
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