web-dev-qa-db-ja.com

pythonで整数(YYYYMMDD)を日付形式(mm / dd / yyyy)に変換する

次のデータフレームがあります。

id int_date  
1  20160228  
2  20161231  
3  20160618  
4  20170123  
5  20151124

Int形式の上記の日付をmm/dd/yyyyの日付形式に変換する方法は?これを特定の形式でさらにExcelの操作に使用したいですか?

id int_date  
1  02/28/2016  
2  12/31/2016  
3  06/18/2016
4  01/23/2017
5  11/24/2015

単語で月のみで3番目の列を生成することもできますか? int_dateから1月、2月など?

フォローしてみました

date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8]))

しかし、日付はdatetimeオブジェクトにあり、日付としてpandas DF?

9

datetimeメソッドを使用できます。

from datetime import datetime
a = '20160228'
date = datetime.strptime(a, '%Y%m%d').strftime('%m/%d/%Y')

がんばろう;

21
Mr Sam

applymapを使用して新しい列を作成します。

import pandas as pd

dates = [
    20160228,
    20161231,
    20160618,
    20170123,
    20151124,
]

df = pd.DataFrame(data=list(enumerate(dates, start=1)), columns=['id','int_date'])

df[['str_date']] = df[['int_date']].applymap(str).applymap(lambda s: "{}/{}/{}".format(s[4:6],s[6:], s[0:4]))

print(df)

放出:

$ python test.py
   id  int_date    str_date
0   1  20160228  02/28/2016
1   2  20161231  12/31/2016
2   3  20160618  06/18/2016
3   4  20170123  01/23/2017
4   5  20151124  11/24/2015
3
aghast

これにはより良い解決策がありますが、日付に1桁の要素の代わりにゼロがあります(つまり6ではなく06)ので、なぜそれを文字列に変換してサブセクションを変換しないのですか?

datetimeを使用すると、月の文字列なども取得できます。

//編集:もう少し正確にするには、次のようなものが仕事をするはずです:

def get_datetime(date):
    date_string = str(date)
    return datetime.date(date_string[:3], date_string[4:6], date_string[6:8]
3
N. Walter