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抱歉,这里不是这样。