日期时间 strftime 格式化
Datetime strftime formatting
我将日期列放入我的数据框中并将其设为字符串,以便在我将其写入 excel 时去掉时间元素。出于某种原因,我似乎无法以我需要的以下格式写日期,即 (10/2/2016)。我可以以这种格式 (10/02/2016) 出现,但出现了两个问题——我需要日期是一位而不是两位,而且也不是按日期顺序排列的(它似乎是按月份排序的,而不是年比月比日)。
这是我的代码:
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
从 here 开始,您可以使用
使日期不被零填充
Code Meaning Example
%m Month as a zero-padded decimal number. 09
%-m Month as a decimal number. (Platform specific) 9
所以使用 %-m
而不是 %m
您可以使用 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
根据添加的样本数据进行编辑:
为了让它只影响天数而不影响月份,我们必须 fill/pad 包含 .month
属性的字符串左侧带有 0,使用 str.zfill
具有宽度参数等于 2,所以个位数的月份将用 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
我将日期列放入我的数据框中并将其设为字符串,以便在我将其写入 excel 时去掉时间元素。出于某种原因,我似乎无法以我需要的以下格式写日期,即 (10/2/2016)。我可以以这种格式 (10/02/2016) 出现,但出现了两个问题——我需要日期是一位而不是两位,而且也不是按日期顺序排列的(它似乎是按月份排序的,而不是年比月比日)。
这是我的代码:
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
从 here 开始,您可以使用
使日期不被零填充Code Meaning Example
%m Month as a zero-padded decimal number. 09
%-m Month as a decimal number. (Platform specific) 9
所以使用 %-m
而不是 %m
您可以使用 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
根据添加的样本数据进行编辑:
为了让它只影响天数而不影响月份,我们必须 fill/pad 包含 .month
属性的字符串左侧带有 0,使用 str.zfill
具有宽度参数等于 2,所以个位数的月份将用 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