日期不一致

时间:2019-01-25 16:55:51

标签: python pandas

我的数据集中的日期不一致。有什么办法可以将它们设置为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格式

1 个答案:

答案 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')