【问题标题】:Pandas Inconsistent date-time formatPandas 日期时间格式不一致
【发布时间】:2016-05-31 06:12:39
【问题描述】:

大约两周前,我开始使用 pandas 库。学习新功能。对于以下问题,我将不胜感激。

我有一列包含混合格式的日期。这是目前存在的 2 种格式

  1. mm/dd/yyyy
  2. dd/mm/yyyy

数据集的摘录:-

Dates  
6/5/2016  
7/5/2016  
7/5/2016  
7/5/2016  
9/5/2016  
9/5/2016  
9/5/2016  
9/5/2016  
5/13/2016  
5/14/2016  
5/14/2016  

我正在努力将这些转换为通用格式。我尝试使用熊猫的'to_datetime'。这没用。 我也不确定在这种情况下使用正则表达式会有什么帮助。

另一条信息。日期按排序顺序排列。可以使用信息完成某事吗?

编辑1:

我知道,如果我们单独查看它们,则无法区分 2016 年 6 月 4 日和 2016 年 5 月 6 日。但是,我希望日期按升序排列并且实际数据集分布超过一年的事实,会有一种方法来理解它。鉴于日期按升序排列,是否有人知道可以理解格式的函数?

编辑2: 2 个月的样本:- 2016 年 4 月和 5 月。请注意,没有模式。所以请不要根据以下数据的模式提出任何解决方案。

2016 年 4 月 1 日 2016 年 4 月 1 日 2016 年 4 月 3 日 2016 年 4 月 3 日 2016 年 3 月 4 日 2016 年 4 月 4 日 2016 年 4 月 4 日 2016 年 4 月 5 日 2016 年 4 月 5 日 2016 年 4 月 7 日 2016 年 4 月 7 日 2016 年 4 月 8 日 2016 年 4 月 8 日 2016 年 4 月 14 日 2016 年 4 月 16 日 2016 年 6 月 4 日 2016 年 7 月 4 日 2016 年 8 月 4 日 2016 年 11 月 4 日 2016 年 11 月 4 日 2016 年 11 月 4 日 2016 年 11 月 4 日 2016 年 11 月 4 日 2016 年 12 月 4 日 2016 年 12 月 4 日 2016 年 12 月 4 日 2016 年 13 月 4 日 2016 年 13 月 4 日 2016 年 13 月 4 日 2016 年 13 月 4 日 14/04/2016 15/4/2016 2016 年 16 月 4 日 2016 年 16 月 4 日 2016 年 4 月 18 日 2016 年 4 月 18 日 2016 年 4 月 19 日 2016 年 4 月 19 日 20/4/2016 20/4/2016 21/4/2016 21/4/2016 21/4/2016 22/4/2016 23/4/2016 23/4/2016 25/4/2016 25/4/2016 26/4/2016 26/4/2016 26/4/2016 26/4/2016 26/4/2016 26/4/2016 2016 年 4 月 29 日 2016 年 4 月 29 日 2016 年 4 月 29 日 2016 年 4 月 30 日 2016 年 2 月 5 日 2016 年 2 月 5 日 2016 年 3 月 5 日 2016 年 3 月 5 日 2016 年 3 月 5 日 2016 年 3 月 5 日 2016 年 4 月 5 日 2016 年 5 月 4 日 2016 年 5 月 4 日 2016 年 5 月 4 日 2016 年 6 月 5 日 2016 年 6 月 5 日 2016 年 7 月 5 日 2016 年 7 月 5 日 2016 年 7 月 5 日 2016 年 9 月 5 日 2016 年 9 月 5 日 2016 年 9 月 5 日 2016 年 9 月 5 日 2016 年 10 月 5 日 2016 年 10 月 5 日 2016 年 11 月 5 日 2016 年 11 月 5 日 2016 年 12 月 5 日 2016 年 5 月 13 日 2016 年 5 月 14 日 2016 年 5 月 14 日 2016 年 5 月 15 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 16 日 2016 年 5 月 17 日 2016 年 5 月 17 日 2016 年 5 月 18 日 2016 年 5 月 18 日 2016 年 5 月 19 日 2016 年 5 月 19 日 2016 年 5 月 20 日 2016 年 5 月 20 日 2016 年 5 月 20 日 2016 年 5 月 20 日 2016 年 5 月 20 日 2016 年 5 月 21 日 2016 年 5 月 23 日 2016 年 5 月 23 日 2016 年 5 月 23 日 2016 年 5 月 23 日 2016 年 5 月 23 日 2016 年 5 月 23 日 2016 年 5 月 24 日 2016 年 5 月 24 日 2016 年 5 月 25 日 2016 年 5 月 26 日 2016 年 5 月 26 日 2016 年 5 月 26 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 27 日 2016 年 5 月 28 日 2016 年 5 月 30 日 2016 年 5 月 30 日

【问题讨论】:

  • 什么是两周?
  • stackoverflow.com/questions/29516616/… - 我已经检查了这篇文章..但是即使使用 error='coerce' 这对我的数据集也不起作用。
  • 你确定不一致吗?如果是,我认为在某些日期是不可能区分的,例如在 6/5/2016 和 5/6/2016 之间。首先是五月还是六月?
  • @jezrael :首先,感谢您的热情回复!是的,日期列不一致。该数据保存在电子表格中。人们没有遵循一致的日期格式。我知道,如果我们单独查看它们,则无法区分 2016 年 6 月 4 日和 2016 年 5 月 6 日。但是,我希望日期按升序排列并且实际数据集已分布一年多这一事实,有一种方法可以理解它。
  • @Amit - 一个月有多少个日期?坏了多少? 5%、50%?

标签: python pandas string-to-datetime


【解决方案1】:

真正的问题是您的数据集中有不明确的日期(您是否将其解析为 mm/dd/yyyy 或 dd/mm/yyyy,如果可能的话??(我来过这里,并且我们决定只选择大多数似乎是什么;本质上数据集被破坏了......我们不得不这样对待它)。


如果它是一个系列,那么用pd.to_datetime 打它似乎有效:

In [11]: s = pd.Series(['6/5/2016', '7/5/2016', '7/5/2016', '7/5/2016', '9/5/2016', '9/5/2016', '9/5/2016', '9/5/2016', '5/13/2016', '5/14/2016', '5/14/2016'])

In [12]: pd.to_datetime(s)
Out[12]:
0    2016-06-05
1    2016-07-05
2    2016-07-05
3    2016-07-05
4    2016-09-05
5    2016-09-05
6    2016-09-05
7    2016-09-05
8    2016-05-13
9    2016-05-14
10   2016-05-14
Name: 0, dtype: datetime64[ns]

注意:如果你有一个一致的格式,你可以明确地传递它:

In [13]: pd.to_datetime(s, format="%m/%d/%Y")
Out[13]:
0    2016-06-05
1    2016-07-05
2    2016-07-05
3    2016-07-05
4    2016-09-05
5    2016-09-05
6    2016-09-05
7    2016-09-05
8    2016-05-13
9    2016-05-14
10   2016-05-14
Name: 0, dtype: datetime64[ns]

【讨论】:

  • 感谢您的回复!我发布的日期实际上是五月。但是 pd.to_datetime() 将 2014 年 7 月 5 日理解为 2016 年 7 月 5 日。我知道,如果我们单独查看它们,则无法区分 2016 年 6 月 4 日和 2016 年 5 月 6 日。但是,我希望日期按升序排列并且实际数据集分布超过一年的事实,会有一种方法来理解它。您是否知道任何可以使用此事实并理解日期的功能?
  • 您可以使用dayfirst=True(但这不能解决歧义)。让我考虑一下单调性。编辑:这是粗略的 cos 蛮力强迫(寻找单调解决方案)可能是 2^N (或更可能是 2 ^ (N/3),因为大多数日期都是非模棱两可的)。
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2021-11-04
  • 2018-02-16
  • 2021-11-10
  • 1970-01-01
  • 2020-08-24
相关资源
最近更新 更多