【发布时间】:2019-12-09 17:19:37
【问题描述】:
熊猫版0.23.4,python版3.7.1
我有一个数据框 df 如下
df = pd.DataFrame([[0.1, 2, 55, 0,np.nan],
[0.2, 4, np.nan, 1,99],
[0.3, np.nan, 22, 5,88],
[0.4, np.nan, np.nan, 4,77]],
columns=list('ABCDE'))
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 NaN 1 99.0
2 0.3 NaN 22.0 5 88.0
3 0.4 NaN NaN 4 77.0
我想将B 和C 列中的 Na 值替换为“A”列中的值。
预期输出是
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 0.2 1 99.0
2 0.3 0.3 22.0 5 88.0
3 0.4 0.4 0.4 4 77.0
我已经尝试使用 fill 和 axis 0 进行填充,但它没有给出预期的输出,(它从上列填充)
df.fillna(method='ffill',axis=0, inplace = True)
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 55.0 1 99.0
2 0.3 4.0 22.0 5 88.0
3 0.4 4.0 22.0 4 77.0
df.fillna(method='ffill',axis=1, inplace = True)
输出:NotImplementedError:
也试过了
df[['B','C']] = df[['B','C']].fillna(df.A)
output:
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 NaN 1 99.0
2 0.3 NaN 22.0 5 88.0
3 0.4 NaN NaN 4 77.0
尝试使用0 填充B 和C 中的所有Na,使用inplace,但这也没有给出预期的输出
df[['B','C']].fillna(0,inplace=True)
output:
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 NaN 1 99.0
2 0.3 NaN 22.0 5 88.0
3 0.4 NaN NaN 4 77.0
如果分配回同一子集,则将0 填充到数据帧切片将起作用
df[['B','C']] = df[['B','C']].fillna(0)
output:
A B C D E
0 0.1 2.0 55.0 0 NaN
1 0.2 4.0 0.0 1 99.0
2 0.3 0.0 22.0 5 88.0
3 0.4 0.0 0.0 4 77.0
1) 如何使用给定数据框中的列 A 中的值填充列 B和C 中的 na 值?
2) 还有为什么在数据框的子集上使用 fillna 时 inlace 不起作用。
3) ffill 沿行怎么做(实现了吗)?
【问题讨论】:
标签: python python-3.x pandas fillna