2017-04-09 4 views
0

私は現在、Pythonのデータ解析に関するUdacityコースを行っています。私たちはunicodecsvライブラリを使用しています。unicodecsv.DictReaderがcsvファイルを表現する方法

具体的には、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

2番目のコードブロックを 'enrollment ['cancel_date']'から 'enrollments ['cancel_date']'に修正してください。私はそれがあなたが意味するものだと思います。 – lU5er

答えて

0

私はあまりにもコースに関連するいくつかのトラブルのためにここに上陸し、これは未回答だとわかりました。しかし、私はあなたがすでにそれを管理していると思います。とにかくここに答えると、他の人がこれを参考にしているかもしれません。

我々はすべて知っているようにも動作するはずです、辞書は

dictionary_name['key'] 

と同様に enrollments['cancel_date']のようにアクセスすることができます。

しかし、あなたは

print enrollments 

ような何かを行う場合、あなたは括弧に気付いた場合、それはlist of dictionariesようなものだ構造に

[{u'status': u'canceled', u'is_udacity': u'True', ...}, {}, ... {}] 

が表示されます。あなたはそれが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']) 

enrollmentenrollments[1], enrollments[2] ... enrollments[n]のような反復可能な要素enrollmentsのそれぞれを捉えるダミー変数です。

ので、すべてのタイムenrollmentenrollments['cancel_date']enrollmentsのでenrollment['cancel_date']作品から辞書を持っています。

最後に、私がスレッドに来た理由をもう少し追加したいと思います。

「u」の意味はなんですか?例:u'cancel_date '= u'11-02-19'

答えは、文字列がUnicodeとしてエンコードされていることを意味します。これは文字列の一部ではなく、Python表記です。 Unicodeは、世界中のすべての言語の文字と記号を含むライブラリです。

これは主に、unicodecsvパッケージがcsvファイル内の各項目の追跡と変換の頭痛を覚えていないために発生します。すべての文字を保持するためにUnicodeとして読み込みます。これで、Carolineとあなたはparse_date()とその他の関数を定義して使用し、Unicode文字列を目的のデータ型に変換しました。これは、すべてデータ・ウォーリング・プロセスの一部です。

関連する問題