Pandas读取archorg.csv报EmptyDataError,交互环境却可正常读取
Pandas读取CSV触发EmptyDataError,但交互环境可正常加载的问题解决
问题场景
我在处理两个包含两列、逗号分隔的CSV文件,已经通过time.sleep()确保文件写入完成后,再用Pandas加载数据,执行以下代码时出现异常:
onlinedf = pd.read_csv('/home/kia/Code/update/data/archorg.csv') pacmandf = pd.read_csv('/home/kia/Code/update/data/pacman.csv')
报错信息
Traceback (most recent call last): File "/home/kia/Code/update/main.py", line 28, in <module> ugh = main() File "/home/kia/Code/update/main.py", line 20, in __init__ filemgr.loadfiles() File "/home/kia/Code/update/files.py", line 10, in loadfiles onlinedf = pd.read_csv('/home/kia/Code/update/data/archorg.csv') File "/usr/lib/python3.10/site-packages/pandas/util/_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "/usr/lib/python3.10/site-packages/pandas/io/parsers/readers.py", line 680, in read_csv return _read(filepath_or_buffer, kwds) File "/usr/lib/python3.10/site-packages/pandas/io/parsers/readers.py", line 575, in _read parser = TextFileReader(filepath_or_buffer, **kwds) File "/usr/lib/python3.10/site-packages/pandas/io/parsers/readers.py", line 934, in __init__ self._engine = self._make_engine(f, self.engine) File "/usr/lib/python3.10/site-packages/pandas/io/parsers/readers.py", line 1236, in _make_engine return mapping[engine](f, **self.options) File "/usr/lib/python3.10/site-packages/pandas/io/parsers/c_parser_wrapper.py", line 75, in __init__ self._reader = parsers.TextReader(src, **kwds) File "pandas/_libs/parsers.pyx", line 551, in pandas._libs.parsers.TextReader.__cinit__ pandas.errors.EmptyDataError: No columns to parse from file
异常现象
- 调换文件读取顺序后,
pacman.csv可正常加载,但archorg.csv仍报相同错误 - 在Python交互环境中逐行执行读取代码,却能正常加载出228行数据:
>>> import pandas as pd >>> pd.read_csv('/home/kia/Code/update/data/archorg.csv') package version 0 python-dulwich 0.20.45-1 1 sqlite-tcl 3.39.1-1 2 sqlite-doc 3.39.1-1 3 sqlite-analyzer 3.39.1-1 4 sqlite 3.39.1-1 .. ... ... 223 python-voluptuous 0.13.1-1 224 python-tldextract 3.3.1-1 225 perl-file-mimeinfo 0.33-1 226 perl-crypt-passwdmd5 1.42-1 227 perl-test-simple 1.302191-1 [228 rows x 2 columns]
排查步骤
已手动检查archorg.csv文件格式,未发现多余逗号、空格或明显格式问题。
解决方法
最终通过两个调整解决了问题:
- 读取CSV时显式指定
sep参数,明确告诉Pandas使用逗号作为分隔符:
onlinedf = pd.read_csv('/home/kia/Code/update/data/archorg.csv', sep=',')
- 替换原有的字符串拼接写入CSV的方式,改用Python标准库的
csv模块完成文件写入操作。
可能原因
- 字符串拼接写入CSV时,容易出现隐藏的格式问题,比如换行符不统一、编码异常、行尾残留特殊字符等,这些问题在手动检查或交互环境中可能被忽略,但会导致Pandas的解析器无法识别有效列
- 显式指定
sep参数可以避免Pandas自动推断分隔符时出现偏差,确保解析逻辑一致 csv模块会自动处理CSV格式的细节(如引号、换行符、分隔符转义等),相比字符串拼接能生成更规范的CSV文件
内容的提问来源于stack exchange,提问作者itsKia2
相关产品推荐
相关产品推荐

