

質問です。python初心者で、よくわからないので、教えてください。  
pandas のDataFrame内のstr型をdatetime型に一括変換し、月や日のデータを取得したいです。

DataFrame型→datetime型への変換はto_datetimeで変換できることは分かったのですが、そこから月・日のデータを抜き出す工程が分かりません。

また、一度to_datetimeで変換したものをstr型に変換する方法もご教示いただければ幸いです。

[code]

    <table>
    <tr><th>2017-04-01 00:00</th><th>土</th></tr>
    <tr><th>2017-04-01 01:00</th><th>土</th></tr>
    <tr><th>2017-04-01 02:00</th><th>土</th></tr>
    <tr><th>2017-04-01 03:00</th><th>土</th></tr>
    <tr><th>2017-04-01 04:00</th><th>土</th></tr>
    </table>
[/code]


CC BY-SA 3.0
2018-01-26T09:09:05.123
41227
2020-11-24T11:01:05.067
2018-01-26T09:25:48.807
19110
27158
question
python python3 pandas
PythonのDataframe型 から Datetime型への変換について


結構時間が経っているようですが、参考までに。  
元データがどういったものかわかりませんでしたので、2017年4月1日から365日分のDataFrame型を作成して、以下の手順で書き出してみました。

[code]

    import numpy as np
    import pandas as pd
    
    #4月1日から翌年3月31日までのDataFrameを作成
    date = np.array('2017-04-01', dtype=np.datetime64)
    df = pd.DataFrame(date + np.arange(365),columns=['date'])
    
    #順番に月日を書き出し
    for row in range(len(df)):
        print(df['date'][row].strftime('%m/%d'))
    
[/code]

最初にdatetime64の型から配列を作り、その後DataFrame型にしています。この場合は、to_datetimeを使わずにそのままcolumnの'data'からstrftime('%m'や'%d')で月や日を指定して抜き取っています。  
元データが日本語表記の月（2017年4月1日）などの場合は、一度変換などする必要があります。  
以下は3日分だけですが、日本語表記から変換する場合です。やっていることはほぼ一緒です。

[code]

    date_jp=['2017年4月1日','2017年4月2日','2017年4月3日']
    df_jp = pd.DataFrame(date_jp,columns=['date'])
    df_jp['date'] = pd.to_datetime(df_jp['date'], format='%Y年%m月%d日')
    for row in range(len(df_jp)):
        print(df_jp['date'][row].strftime('%m/%d'))
    
[/code]

こちらは、リストをDataFrameに変換した後、datetimeの形として認識させ、月と日をfor文で抜き出しています。


CC BY-SA 4.0
2018-10-24T05:04:11.340
49599
2018-10-24T05:04:11.340
30590
41227
answer


`.dt` から、 datetime 系のメソッドが使えます。

[code]

    import pandas as pd
    
    s = pd.Series([
        '20170401 12:00:00',
        '20170401 13:00:00',    
        '20170401 14:00:00',        
    ])
    print(s)
    print('---')
    
    s_dt = pd.to_datetime(s)
    print(s_dt)
    print('---')
    
    print(s_dt.dt.year)
    print('---')
    
    print(s_dt.dt.month)
    print('---')
    
    print(s_dt.dt.day)
    print('---')
    
[/code]

出力

[code]

    0    20170401 12:00:00
    1    20170401 13:00:00
    2    20170401 14:00:00
    dtype: object
    ---
    0   2017-04-01 12:00:00
    1   2017-04-01 13:00:00
    2   2017-04-01 14:00:00
    dtype: datetime64[ns]
    ---
    0    2017
    1    2017
    2    2017
    dtype: int64
    ---
    0    4
    1    4
    2    4
    dtype: int64
    ---
    0    1
    1    1
    2    1
    dtype: int64
    ---
    
[/code]


CC BY-SA 4.0
2019-04-19T01:15:05.283
54307
2019-04-19T01:15:05.283
754
41227
answer