2016-10-06 19 views
-1

私はUdacityでデータ解析コースを受講しました。 私のコードは次のとおりです。ここで引数1はdatetime.datetimeではなくstringでなければなりませんか?

enrollments_filename= '/Users/abc/Desktop/Udacity - Intro to Data Analysis/enrollments.csv' 

def open_file(filename): 
    with open(filename, 'rb') as f: 
     reader = unicodecsv.DictReader(f) 
     return list(reader) 

enrollments = open_file(enrollments_filename) 

# Takes a date as a string, and returns a Python datetime object. 
# If there is no date given, returns None 

from datetime import datetime as dt  
def parse_date(date): 
    if date == '': 
     return None 
    else: 
     return dt.strptime(date, '%Y-%m-%d') 

# Takes a string which is either an empty string or represents an integer, 
# and returns an int or None. 

def parse_maybe_int(i): 
    if i == '': 
     return None 
    else: 
     return int(i) 

for enrollment in enrollments: 
    enrollment['cancel_date'] = parse_date(enrollment['cancel_date']) 
    enrollment['days_to_cancel'] = parse_maybe_int(enrollment['days_to_cancel']) 
    enrollment['is_canceled'] = enrollment['is_canceled'] == 'True' 
    enrollment['is_udacity'] = enrollment['is_udacity'] == 'True' 
    enrollment['join_date'] = parse_date(enrollment['join_date']) 

enrollments[0]  

は、私が得たエラーです:

TypeError: strptime() argument 1 must be string, not datetime.datetime 

は、誰が、なぜ私に説明できますか?私はstr(date)dateを変更すると、ここでエラーがある私が得た:

//anaconda/lib/python2.7/_strptime.pyc in _strptime(data_string, format) 
    333  if len(data_string) != found.end(): 
    334   raise ValueError("unconverted data remains: %s" % 
--> 335       data_string[found.end():]) 
    336 
    337  year = None 


ValueError: unconverted data remains: 00:00:00 

奇妙なことは、私が最初のコードを実行したときに、それが動作する、です。しかし、私は2回目の再押され、それはエラーを返しました!どうもありがとう!

+0

strptimeのstr部分としてdatetimeオブジェクトを渡していたため、最初はエラーが発生していました( 'string'を取り、' time'オブジェクトとして解析します)。文字列も同じ形式でなければなりません'dt.strptime(" 2016-10-4 "、 '%Y-%m-%d')'は 'dt.strptime(" 1610-4 "、 '%Y - %m-%d ') 'は使用できません。オンラインで例を探し、https://docs.python.org/3/library/datetime.html#module-datetime –

+0

を確認してください。問題を投稿する前にドキュメントを覚えておいてくださいエラーが発生したときに出力を出力する必要があります。問題の原因となっているコードセクションでは、こんにちは世界のシナリオでどのように動作するべきかを少なくとも知っていなければなりません。あなたの完璧なhello worldで出力を出力し、ほとんどの場合、差が出て、何を間違っているのかを教えてくれるでしょう。 –

答えて

0

は、私はあなたがあなたのシェル/セッションで二回この行を走っ賭ける:

enrollment['cancel_date'] = parse_date(enrollment['cancel_date']) 

初めての作品が、今[「CANCEL_DATEを」]登録日、ではない文字列です。 2回目にあなたはそれを実行しました - エラー。

+0

ありがとう!今度は、この機能がiPythonで実行されるため、なぜこのコードが2度目に機能しないのか理解しています。私は結果を確認し、登録のデータ型が修正されていることを発見しました。しかし、どうすれば元のデータを返すことができますか? –

+0

make dict、results = {}、その代わりに戻り値を入れてください – MMN

関連する問題