web-dev-qa-db-ja.com

python pandas時系列の年の抽出

DFタイムスタンプを含む:

0     2005-08-31 16:39:40
1     2005-12-28 16:00:34
2     2005-10-21 17:52:10
3     2014-01-28 12:23:15
4     2014-01-28 12:23:15
5     2011-02-04 18:32:34
6     2011-02-04 18:32:34
7     2011-02-04 18:32:34

各タイムスタンプから年を抽出し、DFに次のような追加の列を作成します。

0     2005-08-31 16:39:40 2005
1     2005-12-28 16:00:34 2005
2     2005-10-21 17:52:10 2005
3     2014-01-28 12:23:15 2014
4     2014-01-28 12:23:15 2014
5     2011-02-04 18:32:34 2011
6     2011-02-04 18:32:34 2011
7     2011-02-04 18:32:34 2011

明らかに、私はすべてのDFエントリを日付の最初の4文字を取り除いて処理することができます。これは非常に遅いです。これを実行するための高速のpython方法があるのか​​と思います。 DF = pd.to_datetime(DF、 '%Y-%m-%d%H:%M:%S')によって列を日時形式に変換できますが、次に、timetime.datetime.year(DF)を適用しても機能しません。また、タイムスタンプを月および年と月の組み合わせなどに解析する必要があります...よろしくお願いします。

10
user3861925

各行に関数を適用する必要はありません year 属性にアクセスするために呼び出すことができる新しい datetime 属性があります。

In [35]:

df1['year'] = df1['timestamp'].dt.year
df1
Out[35]:
            timestamp  year
0 2005-08-31 16:39:40  2005
1 2005-12-28 16:00:34  2005
2 2005-10-21 17:52:10  2005
3 2014-01-28 12:23:15  2014
4 2014-01-28 12:23:15  2014
5 2011-02-04 18:32:34  2011
6 2011-02-04 18:32:34  2011
7 2011-02-04 18:32:34  2011

タイムスタンプがstrの場合、 pd.to_dateime を使用してdatetime64に変換できます。

df['timestamp'] = pd.to_datetime(df['timestamp'])

上記のようにdtを使用して、月およびその他の属性にアクセスできます。

0.15.0より前のバージョンでは、以下を実行できます。

df1['year'] = df1['timestamp'].apply(lambda x: x.year)