2017-11-28 7 views
1

日付から日付の列を作成しようとしています。私はこれを行うと、それは完璧に動作します:Pythonの日付から日付列を作成する際にエラーが発生しました - Pandasデータフレーム

from dateutil import parser 
parser.parse(dta.date[0]).strftime("%A") 

Output: 'Tuesday'

をしかし、私はこのような新しい列を作成しようとしているとき:

dta['week_day'] = parser.parse(dta['date']).strftime("%A") 

をそれは私にエラーを与える:

TypeError: Parser must be a string or character stream, not Series

dta.info() 

<class 'pandas.core.frame.DataFrame'> RangeIndex: 107927 entries, 0 to 107926 Data columns (total 16 columns): date 107927 non-null object dep_hour 107927 non-null int64 dep_minute 107927 non-null int64 dep_time 107927 non-null int64 dep_delay 107927 non-null int64 arr_hour 107927 non-null int64 arr_minute 107927 non-null int64 arr_time 107927 non-null int64 arr_delay 107927 non-null int64 carrier 107927 non-null object tailnum 107927 non-null object flight 107927 non-null int64 origin 107927 non-null object dest 107927 non-null object air_time 107927 non-null int64 distance 107927 non-null int64 dtypes: int64(11), object(5)

日は次のようになります。私は、列名dateでシリーズに.apply機能を使用することになり

enter image description here

+0

はあなたがここにあなたの 'dta'オブジェクトを置くことはできますか? –

+0

@FrankAK完了! –

+0

'dta ['date']'を印刷できますか? –

答えて

1

from dateutil import parser 
import pandas as pd 

dta = pd.DataFrame([{"date":"10/20/2017"},{"date":"1/5/2017"},{"date":"5/30/2017"}]) 
dta['date'] = dta['date'].apply(lambda date:parser.parse(date).strftime("%A")) 
print(dta) 

出力:

 date 
0 Friday 
1 Thursday 
2 Tuesday 
+0

ありがとう!それは私の問題を解決しました。しかし、私はまだ私のコードで何が間違っているかは分かりませんでした。 –

+1

Pythonはデータフレームとシリーズを考慮して設計されていません。だから、あなたはどんな機能をも取ることができず、シリーズ内のすべてのアイテムをループしていると仮定することはできません。代わりに、入力データを受け取り、使用する関数を使用して入力データを変更する独自の関数を作成する必要があります。一度に1つのアイテムを目的の機能で処理します。 – Neil

関連する問題