Python 使用pd.read\u csv时跳过日期不正确的行

Python 使用pd.read\u csv时跳过日期不正确的行,python,csv,pandas,Python,Csv,Pandas,我正在使用pd.read\u csv从外部数据源读取csv文件,如下代码所示: pd.read_csv( BytesIO(raw_data), parse_dates=['dates'], date_parser=np.datetime64, ) 但是,正在发送的csv中的某个地方存在格式错误的日期,导致以下错误: ValueError: Error parsing datetime string "2015-08-2" at position 8 这会导致整个应用程

我正在使用
pd.read\u csv
从外部数据源读取csv文件,如下代码所示:

pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=np.datetime64,
)
但是,正在发送的csv中的某个地方存在格式错误的日期,导致以下错误:

ValueError: Error parsing datetime string "2015-08-2" at position 8
这会导致整个应用程序崩溃。当然,我可以通过try/except来处理这种情况,但这样我将丢失该特定csv中的所有其他数据。我需要保存和解析其他数据

我无法预测此数据(每天更改)的日期格式是否不正确。有没有办法让pd.read\u csv只跳过日期不正确的行,但仍然解析csv中的所有其他行

正在发送的csv中的某个地方有一个格式错误的日期

需要字符串才能正常工作。好消息是,您可以在自己的函数中包装
np.datetime64
,并将其用作
date\u解析器

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
   )
我需要保存和解析其他数据

我经常发现,像这样更灵活的日期解析器比
np.datetime64
更有效,甚至可以在没有额外功能的情况下工作:

import dateutil
pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=dateutil.parser.parse,
)

下面是使用pd.convert_objects()方法执行此操作的另一种方法:


使用内置的
pd.to_datetime
,将非日期类型的数据转换为
NaT

pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=pd.to_datetime,
)
现在,您可以使用标准nan/null检查筛选出无效行

df = df[~df["dates"].isnull()]

检查的
skiprows
参数。您可以传递日期不正确的行号列表,但您需要知道行号。可能的格式是什么?如果您愿意,请进行向下投票,请添加注释,以便我可以改进答案。谢谢。我不想更改代码的核心功能。由于项目特定的原因,我需要使用
np.datetime64
,所以这需要保留。对不起,我不是有意否决。除了建议远离
np.datetime64
,这是一个很好的解决方案。谢谢@我知道是最新的程序员,更新后能更好地反映您的需求
df = df[~df["dates"].isnull()]