我试图在我的DataFrame中替换我的NaN值。 我想用一个值替换60%的NaN,用另一个值替换40%。 我阅读了fillna方法的文档,但我找不到。
有什么想法吗?
由于
答案 0 :(得分:1)
你可以这样做:
df.loc[your_condition_for_60%] = df.fillna(10)
df.loc[your_condition_for_40%] = df.fillna(20)
答案 1 :(得分:1)
创建一个布尔数组,该数组的有效值为60/40真/假,其大小与您正在填充的df相同。然后使用combine_first
import pandas as pd
import numpy as np
df = pd.DataFrame(index=list('ABCDEFGHIJ'), columns=list('abcdefghij'))
mask60 = np.random.rand(*df.shape) > 0.6
value40, value60 = 10, 20
fill = value60 * mask60 + value40 * (1 - mask60)
fill = value40 + mask60 * (value60 - value40)
fill_df = pd.DataFrame(fill, index=df.index, columns=df.columns)
看起来像:
print df.combine_first(fill_df)
a b c d e f g h i j
A 10 10 20 20 10 10 10 10 10 20
B 10 10 10 10 10 20 20 10 10 10
C 20 10 10 10 10 10 10 20 20 20
D 10 10 10 20 10 10 20 10 10 10
E 20 20 10 10 20 10 10 10 20 10
F 10 20 10 10 20 10 20 10 10 20
G 20 20 10 10 10 10 10 20 20 10
H 10 10 20 20 10 10 10 10 10 10
I 10 10 10 20 20 10 10 10 10 20
J 10 10 10 20 10 10 20 10 10 10