在将选项卡分隔的文本文件读取到Pandas数据框中时发生RunTimeError

时间:2018-08-01 14:06:37

标签: python pandas csv runtime-error

我正在将一个制表符分隔的文本文件读入pandas数据帧中,在读取此错误时遇到了运行时错误。我遍历了与该错误有关的帖子,所有这些都暗示着一个规则,即不应修改字典在我的情况下,我要做的就是读取文件。此问题与迭代和更改dict的错误有什么联系?

>>> import pandas as pd
>>> df=pd.read_csv("dummy_data.txt",header=None,chunksize=10000,error_bad_lines=False,warn_bad_lines=True,engine='c',sep="\t",encoding="latin-1")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    df=pd.read_csv("dummy_data.txt",header=None,chunksize=10000,error_bad_lines=False,warn_bad_lines=True,engine='c',sep="\t",encoding="latin-1")
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/pandas/io/parsers.py", line 709, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/pandas/io/parsers.py", line 431, in _read
    compression = _infer_compression(filepath_or_buffer, compression)
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/pandas/io/common.py", line 270, in _infer_compression
    filepath_or_buffer = _stringify_path(filepath_or_buffer)
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/pandas/io/common.py", line 157, in _stringify_path
    from py.path import local as LocalPath
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/py/__init__.py", line 148, in <module>
    'Syslog'             : '._log.log:Syslog',
  File "/home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/py/_vendored_packages/apipkg.py", line 63, in initpkg
    for module in sys.modules.values():
RuntimeError: dictionary changed size during iteration

修改1: 通过交互模式读取文件时,在尝试读取文件时遇到两次相同的错误。第三次运行同一行不会引发任何错误。这种不稳定行为的原因可能是什么?

>>> df=pd.read_csv("product_name.txt",header=None,chunksize=10000,error_bad_lines=False,warn_bad_lines=True,engine='c',sep="\t",encoding="latin-1")

修改2:  要复制错误,这里是指向1000行数据集的链接: S3 link to the dataset

编辑3 :找到了一个存在类似问题的链接:Pandas CSV file with occasional extra column 但是在我看来,其中提到的标志(error_bad_lines)似乎不起作用。

>>> df = pd.read_csv("unclean.csv", error_bad_lines=False, header=None)

编辑4: 我开发了一个脚本来将虚拟数据(在Edit 2中提到)加载到熊猫数据帧中,然后将其保存到hdf5文件中。我运行了20次该脚本,一次没有遇到RuntimeError。在交互模式下读取文件会暴露RuntimeError和不稳定的行为。可能是python脚本与交互模式行为不同的原因。我正在使用Pandas == 0.22.0和Python == 3.5.2和表格== 3.4.4

import pandas as pd
import tables

df=pd.read_csv("dummy.txt",header=None,error_bad_lines=False,warn_bad_lines=False,engine='c',sep="\t",encoding="latin-1",names=["product_name_id","current_product_name_id","product_n","active_f","create_d","create_user_n","change_d","change_user_n","ft_timestamp"])

df.to_hdf(path_or_buf="/home/avadhut/data_files/dummy_data.h5",key="dummy",mode="a",format="table")

df=pd.read_hdf("/home/avadhut/data_files/dummy_data.h5",key="dummy")
print(df.head(100))

3 个答案:

答案 0 :(得分:2)

在默认的python解释器上运行代码,看看错误是否仍然存在。这应该是bpython的错误,因为我无法在默认的python解释器上复制问题

答案 1 :(得分:1)

问题出在您的数据上,文件中每行中的标签数量不一致。清理数据后,我能够将文件加载到Pandas中。您需要清理数据并确保每行中的列数相同。

答案 2 :(得分:0)

我有同样的问题。对我有用的是简单地注释该错误指示的文件中的内含线。 “ /home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/py/_vendored_pa​​ckages/apipkg.py”,第63行

注释以下所有行:

# eagerload in bypthon to avoid their monkeypatching breaking packages
    if 'bpython' in sys.modules or eager:
        for module in sys.modules.values():
             if isinstance(module, ApiModule):
                 module.__dict__

不幸的是,我不知道这些方法应该达到什么目的,因此这种肮脏的修正可能会在以后引发其他问题。 有人知道吗?