在python中将整数(YYYYMMDD)转换为日期格式(mm / dd / yyyy)

时间:2017-03-31 06:10:59

标签: python date

我有以下数据框。

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

是否也可以生成第三列,只有几个字?比如1月,2月等来自int_date?

我试过了

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

但是date是在datetime对象中,如何将它作为日期放在pandas DF中?

3 个答案:

答案 0 :(得分:18)

您可以使用datetime方法。

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

祝你好运;

答案 1 :(得分:3)

肯定会有更好的解决方案,但由于你的日期中有零而不是单位数元素(即06而不是6),为什么不将它转换为字符串并转换子节?

使用datetime也可以获得月份字符串等。

//编辑: 为了更精确一点,这样的事情应该可以胜任:

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

答案 2 :(得分:2)

使用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