web-dev-qa-db-ja.com

日時オブジェクトから日と月を抽出します

文字列形式'2017-01-01'の日付の列があります。パンダを使用して日と月を抽出する方法はありますか?

列をdatetime dtypeに変換しましたが、後の部分を理解していません。

df['Date'] =  pd.to_datetime(df['Date'], format='%Y-%m-%d')

df.dtypes: 
Date        datetime64[ns]

print(df)

         Date
0   2017-05-11
1   2017-05-12
2   2017-05-13 
3
Abhi

dt.dayおよびdt.month --- Series.dt

df = pd.DataFrame({'date':pd.date_range(start='2017-01-01',periods=5)})
df.date.dt.month
Out[164]: 
0    1
1    1
2    1
3    1
4    1
Name: date, dtype: int64

df.date.dt.day
Out[165]: 
0    1
1    2
2    3
3    4
4    5
Name: date, dtype: int64

dt.strftime

df.date.dt.strftime('%m')
Out[166]: 
0    01
1    01
2    01
3    01
4    01
Name: date, dtype: object
4
Wen-Ben

dtを使用して、列のdatetime属性を取得します。

In [60]: df = pd.DataFrame({'date': [datetime.datetime(2018,1,1),datetime.datetime(2018,1,2),datetime.datetime(2018,1,3),]})

In [61]: df
Out[61]:
        date
0 2018-01-01
1 2018-01-02
2 2018-01-03

In [63]: df['day'] = df.date.dt.day

In [64]: df['month'] = df.date.dt.month

In [65]: df
Out[65]:
        date  day  month
0 2018-01-01    1      1
1 2018-01-02    2      1
2 2018-01-03    3      1

提供される方法のタイミング:

applyの使用:

In [217]: %timeit(df['date'].apply(lambda d: d.day))
The slowest run took 33.66 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 210 µs per loop

dt.dateの使用:

In [218]: %timeit(df.date.dt.day)
10000 loops, best of 3: 127 µs per loop

dt.strftimeの使用:

In [219]: %timeit(df.date.dt.strftime('%d'))
The slowest run took 40.92 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 284 µs per loop

dt.dayが最速であることがわかります

2
aydow

これはそれを行う必要があります:

df['day'] = df['Date'].apply(lambda r:r.day)
df['month'] = df['Date'].apply(lambda r:r.month)
1
Peybae

単純な形式:

df['MM-DD'] = df['date'].dt.strftime('%m-%d')
1
Babak