使用 pd.read_csv 时跳过日期错误的行

Lat*_*der 5 python csv pandas

我正在使用 读取来自外部数据源的 csv 文件pd.read_csv,如下面的代码所示:

pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=np.datetime64,
)
Run Code Online (Sandbox Code Playgroud)

但是,在发送的 csv 中的某处,日期格式错误,导致以下错误:

ValueError: Error parsing datetime string "2015-08-2" at position 8
Run Code Online (Sandbox Code Playgroud)

这会导致整个应用程序崩溃。当然,我可以使用 try/except 处理这种情况,但是我将丢失该特定 csv 中的所有其他数据。我需要熊猫来保存和解析其他数据。

我无法预测这些数据(每天都在变化)的日期格式错误的时间/地点。有没有办法pd.read_csv只跳过日期错误的行,但仍然解析 csv 中的所有其他行?

mir*_*ixx 9

在正在发送的 csv 中的某处,日期格式错误

np.datetime64需要ISO8601 格式的字符串才能正常工作。好消息是您可以包装np.datetime64自己的函数并将其用作date_parser

def parse_date(v):
   try:
      return np.datetime64(v)
   except:
      # apply whatever remedies you deem appropriate
      pass
   return v

   pd.read_csv(
     ...
     date_parser=parse_date
   )
Run Code Online (Sandbox Code Playgroud)

我需要熊猫来保存和解析其他数据。

我经常发现更灵活的日期解析器dateutilnp.datetime64没有额外功能的效果更好,甚至可以工作:

import dateutil
pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=dateutil.parser.parse,
)
Run Code Online (Sandbox Code Playgroud)