熊猫 - 用两个不同的值替换NaN

时间:2016-05-25 18:56:24

标签: python pandas scikit-learn

我试图在我的DataFrame中替换我的NaN值。 我想用一个值替换60%的NaN,用另一个值替换40%。 我阅读了fillna方法的文档,但我找不到。

有什么想法吗?

由于

2 个答案:

答案 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