Python 日期时间strftime格式
我将数据框中的日期列作为字符串,以便在将其写入excel时去掉时间元素。由于某些原因,我似乎无法按照我需要的格式(2016年2月10日)填写日期。我可以将其以这种格式显示(2016年2月10日),但出现了两个问题-我需要日期为一位数,而不是两位数,并且不符合日期顺序(似乎是按月份排序,而不是按月份排序) 这是我的密码:Python 日期时间strftime格式,python,datetime,pandas,strftime,Python,Datetime,Pandas,Strftime,我将数据框中的日期列作为字符串,以便在将其写入excel时去掉时间元素。由于某些原因,我似乎无法按照我需要的格式(2016年2月10日)填写日期。我可以将其以这种格式显示(2016年2月10日),但出现了两个问题-我需要日期为一位数,而不是两位数,并且不符合日期顺序(似乎是按月份排序,而不是按月份排序) 这是我的密码: df8 = df.set_index('DATE').resample('W-WED').apply(pd.DataFrame.tail, n=1) df8.index= df8
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'))
示例数据(这是使用上述格式显示的数据)
从中,您可以使用
Code Meaning Example
%m Month as a zero-padded decimal number. 09
%-m Month as a decimal number. (Platform specific) 9
因此,使用%-m
代替%m您可以使用%d
代替指令,该指令自动丢弃前导零,以给出所需的格式化日期字符串,如图所示:
pd.to_datetime(df8['DATE']).map(lambda x: '{}/{}/{}'.format(x.month, x.day, x.year))
演示:
根据添加的样本数据进行编辑:
为了使它只影响天而不影响月,我们必须使用宽度参数等于2的0来填充/填充包含.month
属性的字符串的左侧,这样一位数的月份将保留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
您需要发布一些示例数据来帮助我们。@Ted Petrou-我在上面进行了编辑,以便添加一些上面代码打印的示例数据。同样,我正在寻找打印日期为2013年2月1日、2012年4月1日、2011年5月1日等。它似乎也不再按日期顺序打印,而是按月份、日期和年份顺序打印。如果我没记错的话,这在Windows上不起作用。@ayhan解释了“特定于平台”的备注。太糟糕了。我还是会把它留在这里待会儿用。非窗口,users@Mathias711-是的,我对此感到厌倦,但它不起作用,我正在使用windows。这非常有帮助,对我来说是一次很好的学习经历,非常感谢。唯一的问题,我仍然是我需要的日期列是为了从最早的日期到最晚的日期。例如:2011年5月1日、2012年4月1日、2013年2月1日。。等等,我们能做什么?不客气!如果要对日期字符串进行排序,最好先使用pd.to\u datetime
将object
日期列转换为datetime
。根据此列对DF
进行排序,如DF.Sort_值(按=['DATE'],inplace=True)
。现在,您的DF
是按日期升序排列的。在这之后,只需使用我的答案中提供的语法,但这次不使用to_datetime
部分,因为它们已经在datetime64
类型中。让我知道接下来会发生什么。
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
>>> 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