日期时间strftime格式

时间:2016-12-09 15:22:09

标签: python datetime pandas strftime

我正在我的数据框中使用我的日期列并将其作为字符串,以便在我将其写入excel时取消时间元素。出于某种原因,我似乎无法用以下格式写出日期(2016年10月2日)。我可以用这种格式(2016年2月10日)出现,但出现了两个问题 - 我需要一天到一位而不是两位,而且也不是按日期顺序(它似乎是按月排序而不是这一年比一个月而不是一天)。

这是我的代码:

df8 = df.set_index('DATE').resample('W-WED').apply(pd.DataFrame.tail, n=1)
df8.index= df8.index.droplevel(0)
df8 = df8.reset_index('DATE', drop=False)
df8['DATE'] = pd.to_datetime(df8['DATE']).apply(lambda x:x.date().strftime('%m/%d/%Y'))

示例数据(这是使用上述格式显示的内容)

DATE        Distance (cm)
01/02/2013  206.85
01/04/2012  315.33
01/05/2011  219.46
01/06/2016  180.44
01/07/2015  168.55
01/08/2014  156.89

2 个答案:

答案 0 :(得分:2)

您可以使用dt.day代替%d指令,该指令自动丢弃前导零以提供所需的格式化日期字符串,如下所示:

pd.to_datetime(df8['DATE']).map(lambda x: '{}/{}/{}'.format(x.month, x.day, x.year))

<强> 演示:

df = pd.DataFrame(dict(date=['2016/10/02', '2016/10/03', 
                             '2016/10/04', '2016/10/05', '2016/10/06']))

>>> pd.to_datetime(df['date']).map(lambda x: '{}/{}/{}'.format(x.month, x.day, x.year))
0    10/2/2016
1    10/3/2016
2    10/4/2016
3    10/5/2016
4    10/6/2016
Name: date, dtype: object

根据添加的示例数据进行编辑:

为了使它仅影响天而不是几个月,我们必须使用宽度参数等于2的str.zfill填充/填充包含.month属性的字符串的左侧0,因此,单个数字的月份将被填充为0,而双位数字将保持不变。

>>> pd.to_datetime(df['DATE']).map(lambda x: '{}/{}/{}'.format(str(x.month).zfill(2), x.day, x.year))
0    01/2/2013
1    01/4/2012
2    01/5/2011
3    01/6/2016
4    01/7/2015
5    01/8/2014
Name: DATE, dtype: object

答案 1 :(得分:0)

here开始,您可以使用

使这一天不填零
Code      Meaning                                            Example
%m        Month as a zero-padded decimal number.             09
%-m       Month as a decimal number. (Platform specific)     9

因此请使用%-m代替%m