根据某些条件替换丢失的数据

时间:2020-10-22 02:49:18

标签: python python-3.x dataframe data-science imputation

假设我有数据:

      a   b
0    1.0  NaN
1    6.0  1
2    3.0  NaN
3    1.0  NaN

我想遍历此数据以查看, if Data[i] == NaN **and** column['a'] == 1.0 然后将NAN替换为4,而不是在您看到的任何NaN中将其替换为4。我该怎么办?我尝试了所有的if函数,但是没有用。我也做过

for i in df.itertuples():

但是问题是df.itertuples()没有替换功能,我见过的其他方法是一个接一个地完成。

最终结果寻找:

      a   b
0    1.0  4
1    6.0  1
2    3.0  NaN
3    1.0  4

4 个答案:

答案 0 :(得分:1)

def func(x):
    if x['a'] == 1 and pd.isna(x['b']):
        x['b'] = 4
    return x

df = pd.DataFrame.from_dict({'a': [1.0, 6.0, 3.0, 1.0], 'b': [np.nan, 1, np.nan, np.nan]}) 
df.apply(func, axis=1)

使用iterrows()代替apply()可能是更好的选择。

答案 1 :(得分:1)

您可以创建一个遮罩,然后使用该遮罩填充所需的NaN:

df = pd.DataFrame({'a': [1,6,3,1], 'b': [np.nan, 1, np.nan, np.nan]})
mask = df[['a', 'b']].apply(lambda x: (x[0] == 1) and (pd.isna(x[1])), axis=1)
df['b'] = df['b'].mask(mask, df['b'].fillna(4))
print(df)
   a    b
0  1  4.0
1  6  1.0
2  3  NaN
3  1  4.0

答案 2 :(得分:1)

svymean(~age + fpl + gender + persWeight + psu + strata, ageDesign, na.rm = TRUE)

这可以帮助您吗?

答案 3 :(得分:0)

就像您说的那样,您可以通过组合两个条件来实现此目的:a == 1和b == Nan。

要在python中组合两个条件,可以使用&。

在您的示例中:

import pandas as pd
import numpy as np

# Create sample data
d = {'a': [1, 6, 3, 1], 'b': [np.nan, 1, np.nan, np.nan]}
df = pd.DataFrame(data=d)

# Convert to numeric
df = df.apply(pd.to_numeric, errors='coerce')
print(df)

# Replace Nans
df[ (df['a'] == 1 ) & np.isnan(df['b']) ] = 4
print(df) 

应该做到这一点。