Python for循环出现意外的键错误,但手动时不是

Python for循环出现意外的键错误,但手动时不是,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我编写了一个函数,可以为主数据帧中的每个参与者手动创建单独的数据帧。然而,我正在尝试编写它,以便在将来参与者将被添加到数据帧时更加自动化 我的原始功能: def separate_participants(main_df): S001 = main_df[main_df['participant'] == 'S001'] S001.name = "S001" S002 = main_df[main_df['participant'] == 'S002'] S002

我编写了一个函数,可以为主数据帧中的每个参与者手动创建单独的数据帧。然而,我正在尝试编写它,以便在将来参与者将被添加到数据帧时更加自动化

我的原始功能:

def separate_participants(main_df):
    S001 = main_df[main_df['participant'] == 'S001']
    S001.name = "S001"
    S002 = main_df[main_df['participant'] == 'S002']
    S002.name = "S002"
    S003 = main_df[main_df['participant'] == 'S003']
    S003.name = "S003"
    S004 = main_df[main_df['participant'] == 'S004']
    S004.name = "S004"
    S005 = main_df[main_df['participant'] == 'S005']
    S005.name = "S005"
    S006 = main_df[main_df['participant'] == 'S006']
    S006.name = "S006"
    S007 = main_df[main_df['participant'] == 'S007']
    S007.name = "S007"

    participants = (S001, S002, S003, S004, S005, S006, S007)
    participant_names = (S001.name, S002.name, S003.name, S004.name, S005.name, S006.name, S007.name)

    return participants, participant_names
但是,当我尝试更改此项时,我会在主文档中为参与者的名称获取一个keyrerror。代码如下:

def separate_participants(main_df):
    participant_list = list(main_df.participant.unique())
    participants = []

    for participant in participant_list:
        name = participant
        temp_df = main_df[main_df[participant] == participant]
        name = temp_df

        participants.append(name)

    return participants
我得到的错误:KeyError:'S001'

我似乎不知道我做错了什么,这意味着它在旧函数中工作,而不是在新函数中工作。数据帧和列表中对象的长度相同,因此没有额外的字符


如有任何帮助/建议,将不胜感激

感谢@iGuanaaut的回答:


您的数据帧有一个名为“participant”的列,但您正在使用变量participant的值对其进行索引,该变量可能不是数据帧中的列。您可能想要main_df['participant']。最有可能的是,这个关键错误的回溯导致返回到temp_df=main_df[main_df[participant]==participant]行,该行建议您仔细检查它。

您的数据帧有一个名为“paricipant”的列,但您正在使用变量participant的值对其进行索引,该变量participant可能不是数据帧中的列。您可能想要main_df['participant']。最有可能的是,这个关键错误的回溯导致返回到temp_df=main_df[main_df[participant]==participant]行,这表明您应该仔细检查它。我犯了一个如此愚蠢的错误-非常感谢!这只是我一天中的两个小时。不要在作业中使用点符号,始终使用括号符号。请参见“学会使用pdb”。如果您运行python-mpdb,它将在您的keyrerror中中断。这将允许您检查所有的局部变量,尝试自己重新运行这行代码,您可能很快就会理解哪里出了问题。见和。调试是一项需要学习的技能,不会在一夜之间发生,但是如果你练习,像这样的问题需要几秒钟才能解决,而不是几个小时。@accdias抱歉,这里不是这样。