如何跳过丢失的数据并继续运行循环遍历其余数据

问题描述 投票:0回答:1

我正在尝试创建一个函数,该函数可以根据其他列(主题和治疗)的条件从 Expert_Grading_Score 列中提取 1 的第一个实例。我创建了两个列表,其中包含受试者和治疗列的所有唯一值:

subj_list = df_sorted['subj'].unique().tolist()
print(subj_list)

输出: [1001, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1 022]

Treatment_list = df_sorted['Treatment'].unique().tolist()
print(Treatment_list)

输出: ['MPPDDu'、'产品 A'、'产品 C'、'产品 D'、'产品 E'、'产品 F'、'产品 G'、'产品 H'、'标准 S2'、'产品 B'、 ‘产品 I’、‘产品 J’]

然后我创建了一个嵌套的 for 循环来根据主题对每个产品进行排序并应用 iloc:

score = 1 
for idx, subject in enumerate(subj_list):
    for idx2, treatment in enumerate(Treatment_list):
        selected_subsite = df_sorted[(df_sorted.subj == subject) & (df_sorted.Treatment == treatment) & (df_sorted.Expert_Grading_Score == score)].iloc[0]
        print(selected_subsite)

此时,我得到了想要的输出,但当我到达主题 1001 的产品 B 时出现索引错误。经过一番思考并检查主数据表,我意识到某些主题缺少某些治疗,在这种情况下主题 1001 的产品 B。我尝试添加带有条件的 continue 语句来避免丢失数据:

score = 1 
for idx, subject in enumerate(subj_list):
    for idx2, treatment in enumerate(Treatment_list):
        if treatment != '':
            selected_subsite = df_sorted[(df_sorted.subj == subject) & (df_sorted.Treatment == treatment) & (df_sorted.Expert_Grading_Score == score)].iloc[0]
            print(selected_subsite)
        if treatment == '':
            continue

但是遇到了同样的错误。如何调整此代码,以便它跳过丢失的数据点并继续运行其余数据点?任何建议将不胜感激!

Example of input dataframe (left) and output dataframe (right):

python list conditional-statements nested-loops
1个回答
0
投票

您应该检查过滤器的结果是否产生任何行,而不是测试处理是否为空字符串(或除此之外)。也许是这样的:

for idx, subject in enumerate(subj_list):
    for idx2, treatment in enumerate(Treatment_list):
        df_selected_subsite = df_sorted[(df_sorted.subj == subject) & (df_sorted.Treatment == treatment) & (df_sorted.Expert_Grading_Score == score)]
        if df_selected_subsite and not df_selected_subsite.empty:
            print(df_selected_subsite.iloc[0])
© www.soinside.com 2019 - 2024. All rights reserved.