pandas的read_csv方法抛出异常时如何知道行列
How to know line and col when the read_csv method of pandas thows exception
我正在尝试将巨大的 csv 文件导入 pandas Dataframe(200 列和数百万行)。
我正在使用 read_csv 方法,我在参数中提供了一个 dtypes 字典以加速导入。
我有一些关于错误格式的例外情况,我认为 dtype 是这样的:
ValueError: invalid literal for long() with base 10: ''
但是没有提到行号或列。我的文件很大,这些信息将帮助我节省大量时间来查找我的 dtypes 结构中的错误。
有什么想法吗?
编辑:
更准确地说,我要解释所有的故事。首先,我尝试读取此命令行中的 csv 文件:
t = pd.read_csv(filename, sep=",")
它给我这个错误信息:
C:\Python27\lib\site-packages\pandas\io\parsers.py:1159: DtypeWarning: Columns (0) have mixed types. Specify dtype option on import or set low_memory=False.
所以我尝试通过这种方式指定我的数据类型(我不是 copy/paste 完整的数据类型,因为有 207 列):
dtype_file = {
'a': pd.np.int16,
'b': pd.np.int16,
...
}
pd.read_csv(filename, sep=",",dtypes=dtype_file, na_filter=False)
如果试图将空字符串强制转换为长字符串,您会遇到该错误:
In [366]: long("")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-366-65e3f7aa7bfe> in <module>()
----> 1 long("")
ValueError: invalid literal for long() with base 10: ''
所以也许您的数字列中有一些空字符串导致 dtype 强制转换失败。
其实我是自己用low_memory参数解决的:
pd.read_csv(filename, sep=",", na_filter=False, low_memory=False)
我正在尝试将巨大的 csv 文件导入 pandas Dataframe(200 列和数百万行)。
我正在使用 read_csv 方法,我在参数中提供了一个 dtypes 字典以加速导入。
我有一些关于错误格式的例外情况,我认为 dtype 是这样的:
ValueError: invalid literal for long() with base 10: ''
但是没有提到行号或列。我的文件很大,这些信息将帮助我节省大量时间来查找我的 dtypes 结构中的错误。
有什么想法吗?
编辑:
更准确地说,我要解释所有的故事。首先,我尝试读取此命令行中的 csv 文件:
t = pd.read_csv(filename, sep=",")
它给我这个错误信息:
C:\Python27\lib\site-packages\pandas\io\parsers.py:1159: DtypeWarning: Columns (0) have mixed types. Specify dtype option on import or set low_memory=False.
所以我尝试通过这种方式指定我的数据类型(我不是 copy/paste 完整的数据类型,因为有 207 列):
dtype_file = {
'a': pd.np.int16,
'b': pd.np.int16,
...
}
pd.read_csv(filename, sep=",",dtypes=dtype_file, na_filter=False)
如果试图将空字符串强制转换为长字符串,您会遇到该错误:
In [366]: long("")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-366-65e3f7aa7bfe> in <module>()
----> 1 long("")
ValueError: invalid literal for long() with base 10: ''
所以也许您的数字列中有一些空字符串导致 dtype 强制转换失败。
其实我是自己用low_memory参数解决的:
pd.read_csv(filename, sep=",", na_filter=False, low_memory=False)