使用pandas解析CSV并将其转换为dict结果仅导致最后一行中的KeyError

时间:2017-08-08 23:17:12

标签: python pandas csv dictionary

我有一个CSV文件,我在pandas的帮助下解析并转换为类似的字典:contacts = read_csv(file_handle).to_dict()。所以contacts现在是一个字典,包含以下键:

(Pdb) contacts.keys()
['FirstName', 'Title', 'LastName', 'EmailAddress']

有几千行,我需要以某种方式访问​​它们,所以我尝试了许多不同的循环,一个是:

for i, name in enumerate(contacts['FirstName'].values()):
    parsed_contacts.append(dict(
        first_name=name,
        last_name=...
    ))

(以上示例已缩短以用于显示目的) 现在这可以正常工作,直到最后一行,它在FirstName上抛出KeyError:

File "/app/importer/contacts.py", line 290, in parse_contacts
    for i, name in enumerate(contacts['FirstName'].values()):
KeyError: 'FirstName'

这对我来说毫无意义:它实际上适用于4041行,并且在第4042行因KeyError而失败

如果我以其他方式访问它,同样的事情:

for i in range(len(contacts['FirstName'].values())):
    parsed_contacts.append(dict(
        first_name=contacts['FirstName'][i],

不确定那里发生了什么,它让我发疯,因为如果我在pdb中以交互方式运行它们会起作用:

(Pdb) for i, name in enumerate(contacts['FirstName'].values()): print             
name
John
Juliette
...
nan
Jose
Jesús
Frances
(Pdb) for i in range(len(contacts['FirstName'].values())): print i
0
...
4040
4041

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

当csv文件末尾有新行时,通常会发生此错误。因此,当csv阅读器读取文件时,它基本上将其作为没有键的空记录。因此,引发了一个关键错误。一种解决方法是,您可以使用dict.get() method来确保不会引发错误。您可以查找[此处更多示例]和here 3。还要仔细检查csv文件末尾是否有额外的行。