我正在将一个制表符分隔的文本文件读入 pandas 数据框。我在阅读此文件时遇到运行时错误。我浏览了与此错误相关的帖子,所有这些帖子都暗示了不应该修改字典的规则在迭代它们的同时。在我的例子中,我所做的只是读取一个文件。这个问题如何与迭代和更改字典的错误相关联?
>>> 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: 我开发了一个脚本来将虚拟数据(在编辑 2 中提到)加载到 pandas 数据帧,然后将其保存到 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))
最佳答案
在默认的 python 解释器上运行你的代码,看看错误是否仍然存在。这应该是 bpython 的一个错误,因为我无法在默认的 python 解释器上复制这个问题
关于python - 将制表符分隔的文本文件读入 Pandas 数据帧时出现 RunTimeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635417/