尝试使用Python在一列中选择具有特定值范围的行时发生KeyError

2024-10-01 11:40:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在这个线程中找到了解决问题的大部分方法:Use Python to select rows with a particular range of values in one column

但是在实现代码时,我遇到了一个我无法理解的错误。我试图从citibike数据中提取订户的数据行(这里的信息:http://www.citibikenyc.com/system-data

代码如下:

import csv

with open("E:/Dropbox/PPS/CitiBikeData/2014_Data.csv") as input, open("E:/Dropbox/PPS/CitiBikeData/subscribers.csv", "w") as output:
   reader = csv.DictReader(input, dialect="excel-tab")
   fieldnames = reader.fieldnames
   writer_output = csv.DictWriter(output, fieldnames, dialect="excel-tab")
   writer_output.writeheader()
   for row in reader:
       if int(row['gender']) > 0:
          writer_output.writerow(row)

我得到的错误是:

^{pr2}$

我知道什么是KeyError(从阅读本文https://wiki.python.org/moin/KeyError)开始,但我不知道为什么会出现这个错误,或者如何修复它。在


Tags: csv数据代码inoutput错误withopen
1条回答
网友
1楼 · 发布于 2024-10-01 11:40:43

您下载的数据不是制表符分隔的。您使用了错误的CSV方言打开它。在

删除dialect参数,默认值(逗号分隔)适合以下格式:

>>> import csv
>>> f = open("/tmp/2013-07 - Citi Bike trip data.csv")
>>> reader = csv.DictReader(f)
>>> next(reader)
{'bikeid': '16950', 'tripduration': '634', 'end station longitude': '-73.98165557', 'stoptime': '2013-07-01 00:10:34', 'end station name': '1 Ave & E 15 St', 'gender': '0', 'start station name': 'E 47 St & 2 Ave', 'start station longitude': '-73.97032517', 'start station id': '164', 'start station latitude': '40.75323098', 'end station id': '504', 'starttime': '2013-07-01 00:00:00', 'end station latitude': '40.73221853', 'birth year': '\\N', 'usertype': 'Customer'}
>>> _['gender']
'0'

由于gender列是'0'或{}或{},在这种情况下,您可以简单地测试是否不等于'0',并为自己节省一个int()调用:

^{pr2}$

它使用生成器表达式将所有筛选的行传递给DictWriter.writerows()(复数)。在

相关问题 更多 >