【问题标题】:How to know line and col when the read_csv method of pandas thows exceptionpandas的read_csv方法抛出异常时如何知道行列
【发布时间】:2015-04-26 04:14:23
【问题描述】:

我正在尝试将巨大的 csv 文件导入 pandas Dataframe(200 列和数百万行)。

我正在使用 read_csv 方法,我在参数中提供了一个 dtypes 字典以加速导入。

我有一些关于错误格式的例外情况,我认为 dtype 是这样的:

ValueError: 以 10 为底的 long() 的无效文字:''

但是没有引用行号或列。我的文件很大,这些信息将帮助我节省大量时间来查找我的 dtypes 结构中的问题。

有什么想法吗?

编辑:

更准确地说,我将解释所有的故事。首先,我尝试读取此命令行的 csv 文件:

t = pd.read_csv(filename, sep=",")

它给了我这个错误信息:

C:\Python27\lib\site-packages\pandas\io\parsers.py:1159:DtypeWarning:列 (0) 具有混合类型。在导入时指定 dtype 选项或设置 low_memory=False。

所以我尝试通过这种方式指定我的 dtype(我没有复制/粘贴完整的 dtype,因为有 207 个列):

dtype_file = {
  'a': pd.np.int16,
  'b': pd.np.int16,
...
}
pd.read_csv(filename, sep=",",dtypes=dtype_file, na_filter=False)

【问题讨论】:

  • read_csv 使用了哪些参数?

标签: python numpy pandas


【解决方案1】:

其实我自己用low_memory参数解决的:

pd.read_csv(filename, sep=",", na_filter=False, low_memory=False)

【讨论】:

    【解决方案2】:

    如果尝试将空字符串强制为 long,则会出现该错误:

    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 强制失败。

    【讨论】:

    • 可以自动强制吗?
    • 将您的read_csv 电话添加到您的问题中,这将有助于人们进行故障排除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2011-09-20
    • 2017-08-09
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多