【问题标题】:Python failed to parse dates when reading from csv file [duplicate]从 csv 文件读取时,Python 无法解析日期 [重复]
【发布时间】:2016-10-07 21:01:45
【问题描述】:

我一直在用

pd.read_csv('file.csv',parse_dates=['date_time']) 

解析日期,然后运行 ​​DateTimeIndex 从 date_time 变量中读取年、月、日。正确完成后,'date_time' 应格式化为 datetime64。但是数据列中有一些东西,我一直将“对象”作为变量格式,所以当 DateTimeIndex 它时我收到 ValueError 。我的数据太大了,我无法找出到底发生了什么。我应该如何处理这个问题,以便我可以将异常更改为丢失并解析 data_time 变量?谢谢。

更新:

我按照 Edchum 的建议做了,除了手动操作。这是我的猜测为什么数据不正确:一个日期应该是 2016,而不是显示 2161。有谁知道为什么在这种情况下 python 不会解析日期时间?如何识别所有与此相似的行并全部删除?

【问题讨论】:

  • 添加示例数据,以防它有什么独特之处。检查 parse_dates 的语法。
  • 我尝试了线程中建议的方法,但出现以下错误:
  • OutOfBoundsDatetime:越界纳秒时间戳:1-255-255 00:00:00
  • 您可以使用二分查找的方式来查找有问题的记录(取1st/2nd一半,看哪个有问题,然后再拆分)。
  • 对python比较陌生,二进制方法是什么?

标签: python pandas


【解决方案1】:

这将帮助您诊断问题。请运行这个 sn-p 并发布bad_rows的输出

df = pd.read_csv('file.csv')
bad rows = []
good_rows = []
for row, date in enumerate(df['date_time']):
    try:
        good_rows.append((row,dateutil.parser.parse(date)))
    except Exception as e:
        print(str(e))
        bad_rows.append((row,date))

【讨论】:

  • 我运行了代码,但 bad_rows 似乎捕获了所有行,而 good_rows 没有捕获任何行..
  • 已编辑。请至少给出几个无法解析的date的例子和对应的Exception
  • @michael_j_ward,感谢您的跟进。我再次运行它,但再次出现错误。它说“ValueError:对已关闭文件的 I/O 操作”
  • @Merlin 这是来自 kaggle expedia 竞赛的测试文件。这是数据的链接:kaggle.com/c/expedia-hotel-recommendations/data
  • 我也会尝试添加几行作为示例显示
【解决方案2】:

试试这个:

import pandas as pd 
df = pd.read_csv('test.csv.gz', compression='infer',date_parser=True, usecols=([0,1,3]))
print df.head()

#       id            date_time  posa_continent
#    0   0  2015-09-03 17:09:54               3
#    1   1  2015-09-24 17:38:35               3
#    2   2  2015-06-07 15:53:02               3
#    3   3  2015-09-14 14:49:10               3
#    4   4  2015-07-17 09:32:04               3

【讨论】:

  • 这是一种直接从 gz 文件加载数据的好方法。它仍然不能完全解决我的问题。道歉我在问题中引用了 date_time(保持一般性),但实际上是 srch_ci 列(搜索签入日期)有问题。我更多地使用数据并确认是某一特定行(行 id=312920)导致了所有问题。所以我把它删除了,一切都很顺利。但是感谢您的帮助!!!
  • @CWlearner,如果是一行,请编辑该行并重新添加。
  • 是的,我认为你是对的。我要将其值更改为缺失,以便稍后处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2016-12-03
  • 2013-01-21
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多