使用pandas中其他列值的平均值在列中插入空值

时间:2019-12-23 04:49:04

标签: python data-science

我的数据集长度是20216100

我的数据集monthcloud_coverage中有两列。

cloud coverage的{​​{1}}值为43%。

现在,我尝试用null的平均值null填充cloud_coverage的值。

month

我执行以下代码后,它将运行数小时而没有任何输出

cloud_cov_mean=list(train.groupby('month')['cloud_coverage'].mean())
cc_dic={}

for index,val in enumerate(cloud_cov_mean):
    cc_dic[index+1]=val

null_list=cc_df[cc_df['cloud_coverage'].isnull()].index.tolist()

是否可以使用上述逻辑来插补for val in null_list: cc_month=cc_df.loc[val,'month'] imp_val=cc_dic[cc_month] cc_df.loc[val,'cloud_coverage']=imp_val 值?

1 个答案:

答案 0 :(得分:0)

您可以对months的每个子集使用pandas.DataFrame.fillna

# create dictionary of 'month' as key and 'mean of month' as value
cc_dic = train.groupby('month')['cloud_coverage'].mean().to_dict()
#for mnth in train.month.unique():
for key, value in cc_dic.items():
    train.loc[train.month == key,'cloud_coverage'] = train.loc[train.month == key,'cloud_coverage'].fillna(value)

或将值分配回值为na的每个月

cc_dic = train.groupby('month')['cloud_coverage'].mean().to_dict()
for key, value in cc_dic.items():
    train.loc[((train.month == key) & (train.cloud_coverage.isnull())),'cloud_coverage'] = value