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
如您所见,某些列的 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
- 我使用 pd.read_csv() 从 csv 中提取数据。在原始csv文件中,有些列是数值,有些列是字符串
如果所有字符串都存储为 '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
这是示例数据帧:
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
- 我使用 pd.read_csv() 从 csv 中提取数据。在原始csv文件中,有些列是数值,有些列是字符串
如果所有字符串都存储为 '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