微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在pandas.read_csv中使用空值处理解析日期?

考虑以下组成的CSV:

from io import StringIO

data = """value,date
7,null
7,10/18/2008
621,(null)"""

fake_file = StringIO(data)

我想使用pandas.read_csv读取此文件,使用na_values参数处理空值,使用parse_dates和date_parser处理日期:

import pandas as pd

date_parser = lambda c: pd.datetime.strptime(c, '%m/%d/%Y')

df = pd.read_csv(fake_file, parse_dates=['date'], date_parser=date_parser, na_values=['null', '(null)'])

在Python 3.5中运行此代码给了我:

  File "<ipython-input-11-aa5bcf0858b7>", line 1, in <lambda>
    date_parser = lambda c: pd.datetime.strptime(c, DATE_FMT)

TypeError: strptime() argument 1 must be str, not float

所以似乎首先处理空值然后尝试解析日期…

我知道我可以这样做:

df = pd.read_csv(fake_file, na_values=['null', '(null)'])
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')

但我真正的问题是如何一举处理日期格式化和NaN处理……

解决方法:

使用to_datetime格式和错误=’coerce’:

date_parser = lambda c: pd.to_datetime(c, format='%m/%d/%Y', errors='coerce')
df = pd.read_csv(fake_file, parse_dates=['date'], date_parser=date_parser)
print (df)
   value       date
0      7        NaT
1      7 2008-10-18
2    621        NaT

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐