タイムスタンプ値のDataFrame sales
があると仮定します。
_timestamp sales_office
2014-01-01 09:01:00 Cincinnati
2014-01-01 09:11:00 San Francisco
2014-01-01 15:22:00 Chicago
2014-01-01 19:01:00 Chicago
_
新しい列_time_hour
_を作成したいと思います。短い関数を作成し、apply()
を使用して繰り返し適用することで作成できます。
_def hr_func(ts):
return ts.hour
sales['time_hour'] = sales['timestamp'].apply(hr_func)
_
この結果が表示されます。
_timestamp sales_office time_hour
2014-01-01 09:01:00 Cincinnati 9
2014-01-01 09:11:00 San Francisco 9
2014-01-01 15:22:00 Chicago 15
2014-01-01 19:01:00 Chicago 19
_
私がlikeを達成したいのは、次のような短い変換です(間違っていることはわかっていますが、精神に到達します)。
_sales['time_hour'] = sales['timestamp'].hour
_
明らかに列はSeries
型であり、そのような属性はありませんが、行列演算を使用するより簡単な方法があるようです。
より直接的なアプローチはありますか?
タイムスタンプがデータフレームのインデックスであると仮定すると、あなたはちょうどすることができます
hours = sales.index.hour
それを販売データフレームに追加したい場合は、
import pandas as pd
pd.concat([sales, pd.DataFrame(hours, index=sales.index)], axis = 1)
編集:日時オブジェクトの列が複数ある場合は、同じプロセスです。データフレームに列['date']があり、 'date'にdatetime値があると仮定すると、 'date'から次のように時間にアクセスできます。
hours = sales['date'].hour
lambda expression を使用できます。例:
sales['time_hour'] = sales.timestamp.apply(lambda x: x.hour)
これを試すことができます:
sales['time_hour'] = pd.to_datetime(sales['timestamp']).dt.hour