如何在数据帧中存储for循环的每次迭代结果

时间:2020-05-14 16:27:21

标签: python pandas numpy

cols = Germandata.columns
percentage_list = [0.05,0.01,0.1]
for i in range(len(Germandata)) :
    for percentage in percentage_list:
        columns_n = 3
        random_columns = np.random.choice(cols, columns_n, replace=False)
        local_data = Germandata.copy()
        remove_n = int(round(local_data.shape[0] * percentage, 0))
        for column_name in random_columns:
            drop_indices = np.random.choice(local_data.index, remove_n, replace=False)
            local_data.loc[drop_indices, column_name] = np.nan

此处的代码随机选择列,并将从数据中删除一定百分比的观测值,并将其替换为NAN。这里的问题是运行循环后,我将在百分比列表中获得最后删除的百分比数据帧,因为它在每次迭代后都会被覆盖。每次迭代后如何使用nans存储数据框?理想情况下,我应该获得三个数据帧,并删除不同百分比的数据。

1 个答案:

答案 0 :(得分:0)

尝试一下

df_list = []
cols = Germandata.columns
percentage_list = [0.05,0.01,0.1]
for percentage in percentage_list:
    columns_n = 3
    random_columns = np.random.choice(cols, columns_n, replace=False)
    local_data = Germandata.copy()
    remove_n = int(round(local_data.shape[0] * percentage, 0))
    for column_name in random_columns:
        drop_indices = np.random.choice(local_data.index, remove_n, replace=False)
        local_data.loc[drop_indices, column_name] = np.nan
        local_data['percentage'] = percentage # optional
    df_list.append(local_data)
df_05 = df_list[0]
df_01 = df_list[1]
df_1 = df_list[2]

或者,您可以使用字典

df_dict = {}
cols = Germandata.columns
percentage_list = [0.05,0.01,0.1]
for percentage in percentage_list:
    columns_n = 3
    random_columns = np.random.choice(cols, columns_n, replace=False)
    local_data = Germandata.copy()
    remove_n = int(round(local_data.shape[0] * percentage, 0))
    for column_name in random_columns:
        drop_indices = np.random.choice(local_data.index, remove_n, replace=False)
        local_data.loc[drop_indices, column_name] = np.nan
        local_data['percentage'] = percentage # optional
    df_dict[str(percentage)] = local_data
df_05 = df_dict['0.05']
df_01 = df_dict['0.01']
df_1 = df_dict['0.1']

相关问题