我的数据集中的日期不一致。有什么办法可以将它们设置为YY / DD / MM等特定格式?所有这些日期都是一月,并且是连续的,但是日期和月份从第七行开始翻转。
0 2016-04-01
1 2016-05-01
2 2016-06-01
3 2016-07-01
4 2016-08-01
5 2016-11-01
6 2016-12-01
7 2016-01-13
8 2016-01-14
9 2016-01-15
10 2016-01-18
11 2016-01-19
CSV数据看起来像这样。此文件中的日期不是实际日期格式的对象。 enter image description here
预期的输出应如下所示:
0 2016-04-01
1 2016-05-01
2 2016-06-01
3 2016-07-01
4 2016-08-01
5 2016-11-01
6 2016-12-01
7 2016-13-01
8 2016-14-01
9 2016-15-01
10 2016-18-01
11 2016-19-01
所有日期均为YY / DD / MM格式
答案 0 :(得分:0)
如果您已经确切地知道需要重新格式化日期的行(并且.csv不太大),则可以先致电pd.to_datetime()
,然后再致电strftime()
来以所需的格式显示必要的“日期”。不利的一面是,正如评论者之一指出的那样,它们的数据类型将不是datetime64。
如果您对此表示满意,并且唯一重要的是日期的外观(并且您无需对日期进行算术运算),那么可以使用您给出的示例进行以下操作:
d = {'date': ['2016-04-01', '2016-05-01', '2016-06-01', '2016-07-01', '2016-08-01',
'2016-11-01', '2016-12-01', '2016-01-13', '2016-01-14', '2016-01-15',
'2016-01-18', '2016-01-19']}
df = pd.DataFrame(data=d)
date
0 2016-04-01
1 2016-05-01
2 2016-06-01
3 2016-07-01
4 2016-08-01
5 2016-11-01
6 2016-12-01
7 2016-01-13
8 2016-01-14
9 2016-01-15
10 2016-01-18
11 2016-01-19
运行此行会将最后五行转换为所需的外观:
df['date'].iloc[7:] = pd.to_datetime(df['date'].iloc[7:]).apply(lambda x: x.strftime('%Y-%d-%m'))
结果数据框如下:
date
0 2016-04-01
1 2016-05-01
2 2016-06-01
3 2016-07-01
4 2016-08-01
5 2016-11-01
6 2016-12-01
7 2016-13-01
8 2016-14-01
9 2016-15-01
10 2016-18-01
11 2016-19-01
如果运行df.iloc[11].dtype
,我们将看到数据类型为dtype('O')
。