我正在将一个制表符分隔的文本文件读入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))
答案 0 :(得分:2)
在默认的python解释器上运行代码,看看错误是否仍然存在。这应该是bpython的错误,因为我无法在默认的python解释器上复制问题
答案 1 :(得分:1)
问题出在您的数据上,文件中每行中的标签数量不一致。清理数据后,我能够将文件加载到Pandas中。您需要清理数据并确保每行中的列数相同。
答案 2 :(得分:0)
我有同样的问题。对我有用的是简单地注释该错误指示的文件中的内含线。 “ /home/avadhut/.virtualenvs/avadhut_virtual/lib/python3.5/site-packages/py/_vendored_packages/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__
不幸的是,我不知道这些方法应该达到什么目的,因此这种肮脏的修正可能会在以后引发其他问题。 有人知道吗?