我目前正在阅读python中关于数据分析的Udacity课程,我们一直在使用unicodecsv库。
更具体地说,我们编写了以下代码来读取csv文件并将其转换为列表。这是代码:
def read_csv(filename):
with open(filename,'rb')as f:
reader = unicodecsv.DictReader(f)
return list(reader)
为了解决这个问题,我想弄清楚数据是如何在字典和列表中表示的,我很困惑。有人可以向我解释一下。
例如,我不明白的一件事是为什么以下引发错误
enrollment['cancel_date']
虽然以下工作正常:
for enrollment in enrollments:
enrollments['cancel_date'] = parse_date(enrollment['cancel_date'])
希望这个问题有道理。我只是在想象所有这些是如何表现出来的。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:0)
我也因为与课程相关的一些麻烦而来到这里,发现这个没有答案。但是我认为你已经管理好了。无论如何回答这里,以便其他人可能会发现这有用。
就像我们都知道的那样,可以像
那样访问词典dictionary_name['key']
同样如此
enrollments['cancel_date']
也应该有用。
但是,如果你做了像
这样的事情print enrollments
你会看到结构
[{u'status': u'canceled', u'is_udacity': u'True', ...}, {}, ... {}]
如果你注意到方括号,它就像list of dictionaries
一样。你可能会认为它是list of list
。试试吧。
print enrollments[0][0]
你会收到错误! KeyError
。
所以,它就像一组词典。如何访问它们?通过enrollments[n]
缩小到任何字典(而不是csv的行)。
现在你有了一本字典。您现在可以自由使用key
。
print enrollments[0]['cancel_date']
现在进入你的循环,
for enrollment in enrollments:
enrollment['cancel_date'] = parse_date(enrollment['cancel_date'])
这样做是enrollment
是捕获每个可迭代元素enrollments
的虚拟变量,如enrollments[1], enrollments[2] ... enrollments[n]
。
因此,每次enrollment
都有来自enrollments
的字典,因此enrollment['cancel_date']
可以使用enrollments['cancel_date']
。
最后我想补充一点,这就是为什么我来到线程。
" u"是什么意思?在你' ..' ?例如:u' cancel_date' = u' 11-02-19'。
答案是这意味着字符串被编码为Unicode
。它不是字符串的一部分,它是python表示法。 Unicode是一个包含所有世界语言的字符和符号的库。
这主要是因为unicodecsv
包不会成为跟踪和转换csv文件中每个项目的头痛问题。它将它们读作Unicode以保留所有字符。现在,这就是Caroline和您定义并使用parse_date()
和其他函数将Unicode字符串转换为所需数据类型的原因。这是数据处理过程的一部分。