从datetime对象中提取两个而不是四个数字年份

时间:2017-06-29 19:56:46

标签: python pandas datetime

我使用以下代码在日期时间对象的pandas数据框中创建一个新的时间变量:

data['Date'] = pd.to_datetime(data['Date'])
data['Year'] = data['Date'].apply(lambda x: x.year)
data['Month'] = data['Date'].apply(lambda x: x.month)
data['Day'] = data['Date'].apply(lambda x: x.day)
data['time'] = data['Month'].map(str) + '/' + data['Day'].map(str)  
+'/'+ data['Year'].map(str)
data = data.drop(["Date", 'Year','Month',"Day"], axis=1)

产生以下'时间'柱:

 0         2/4/2016
 1        8/16/2016
 2        9/28/2016
 3        9/29/2016
 4        10/5/2016

我希望输出是这样的:

0         2/4/16
1        8/16/16
2        9/28/16
3        9/29/16
4        10/5/16

2 个答案:

答案 0 :(得分:3)

将日期访问者与strftimepd.Series.dt.strftime一起使用 有关您可以使用的代码,请参阅http://strftime.org/

考虑数据框df

df = pd.DataFrame(dict(Date=pd.date_range('2017-01-01', periods=5)))
df

        Date
0 2017-01-01
1 2017-01-02
2 2017-01-03
3 2017-01-04
4 2017-01-05

然后

df['time'] = df.Date.dt.strftime('%-m/%-d/%y')

df

        Date    time
0 2017-01-01  1/1/17
1 2017-01-02  1/2/17
2 2017-01-03  1/3/17
3 2017-01-04  1/4/17
4 2017-01-05  1/5/17

答案 1 :(得分:1)

您可以通过更改作用于年度列的lambda函数来执行此操作。

data['Date'] = pd.to_datetime(data['Date'])

data['Year'] = data['Date'].apply(lambda x: str(x.year)[-2:]) #Last two characters of year

data['Month'] = data['Date'].apply(lambda x: x.month)
data['Day'] = data['Date'].apply(lambda x: x.day)
data['time'] = data['Month'].map(str) + '/' + data['Day'].map(str) +'/'+ data['Year'].map(str)[2:]
data = data.drop(["Date", 'Year','Month',"Day"], axis=1)