簡體   English   中英

哪個文件導致 `dask.dataframe.read_csv` 失敗?

[英]Which file is causing `dask.dataframe.read_csv` to fail?

我經常遇到的錯誤是

>> 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`.

很明顯,我的一個文件格式錯誤,但哪個文件格式錯誤? 到目前為止,我想出的最佳解決方案是:

  • 在 IPython 中重新運行相同的命令
  • %調試魔法
  • 將原始 CSV 文本的樣本打印到控制台
  • 找到一個獨特的文本和 grep 直到我找出有問題的文件

這對我來說似乎非常迂回,但除非我遺漏了一些明顯的東西,否則回溯中似乎沒有任何其他識別信息可用。 有沒有更好的方法來找出哪個文件失敗了? 使用collection=False並檢查Delayed對象也可能有效,但我不確定要查找什么。 有什么方法可以讓引發的異常包含一些關於問題發生位置的提示,或者一旦read_csv該信息是否不可用?

一種方法可能是在讀取文件時包含文件名,推遲日期解析(僅遵循錯誤消息中的建議),將錯誤視為NaT ,並在結果中挑選出有問題的。 在下面的示例中, 2.csv3.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

特別是,這告訴我們,在第二行(索引1) 2.csv ,並在第一行(索引0) 3.csv是罪魁禍首。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM