我经常遇到的类似错误
>> dd.read_csv('/tmp/*.csv', parse_dates=['start_time', 'end_time'])
Traceback (most recent call last):
...
File "/Users/brettnaul/venvs/model37/lib/python3.6/site-packages/dask/dataframe/io/csv.py", line 163, in coerce_dtypes
raise ValueError(msg)
ValueError: Mismatched dtypes found in `pd.read_csv`/`pd.read_table`.
The following columns failed to properly parse as dates:
- start_time
- end_time
This is usually due to an invalid value in that column. To
diagnose and fix it's recommended to drop these columns from the
`parse_dates` keyword, and manually convert them to dates later
using `dd.to_datetime`.
很明显,我的一个文件格式错误,但是哪个文件格式错误?到目前为止,我想出的最好的解决方案是:
对我来说,这似乎是一个round回,但除非我缺少明显的东西,否则回溯中似乎没有其他可用的识别信息。是否有更好的方法来找出哪个文件失败?使用collection=False
并检查Delayed
对象也可能有效,但我不确定要查找的内容。
read_csv
后,引发的异常是否可以通过某种方式包含有关问题发生位置的提示?
答案 0 :(得分:1)
一种方法可能是在读取文件时包括文件名,推迟日期解析(仅遵循错误消息中的建议),将错误视为NaT
,然后从文件中找出有问题的错误。结果。在下面的示例中,2.csv
和3.csv
包含有问题的值:
In [45]: !cat 1.csv
a
2018-01-01
2018-01-02
In [46]: !cat 2.csv
a
2018-01-03
2018-98-04
In [47]: !cat 3.csv
a
2018-01-05b
2018-01-06
In [48]: !cat 4.csv
a
2018-01-07
2018-01-08
In [49]: df = dd.read_csv('*.csv', include_path_column=True)
In [50]: df['a'] = dd.to_datetime(df.a, errors='coerce')
In [51]: df[df['a'].isnull()].path.compute()
Out[51]:
1 2.csv
0 3.csv
尤其是,这告诉我们2.csv
中的第二行(索引为1)和3.csv
中的第一行(索引为0)是罪魁祸首。