我在使用pandas读取一些txt文件时遇到了一个问题。在
我的文件内容如下所示。在
WNS 01.20
57039 108.8833 34.0833 445.8 LC 20150322120000
OOBS
00100 ///// ///// ////// /// /// ////////
00160 216.3 003.7 0006.5 100 100 -1.2E+02
00220 258.9 006.7 0006.6 100 100 -1.3E+02
00280 263.9 007.9 0006.6 100 100 -1.3E+02
前三行不是我想要的,所以我忽略了它。所以我从“00100”行读到,有些行没有数据,它会显示为“////”,它可以在任何一行。在
下面是我的代码
^{pr2}$当“///”不在“00100”(实际上是第一行)中显示时,它工作得很好(我想要的是如果有“///”,就让它是NaN)。在
但是,我们可以看到,在这个文件中,第一行显示“//”,然后有一个错误:
File "D:\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 655, in parser_f
return _read(filepath_or_buffer, kwds)
File "D:\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 411, in _read
data = parser.read(nrows)
File "D:\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1005, in read
ret = self._engine.read(nrows)
File "D:\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1748, in read
data = self._reader.read(nrows)
File "pandas/_libs/parsers.pyx", line 890, in pandas._libs.parsers.TextReader.read (pandas\_libs\parsers.c:10862)
File "pandas/_libs/parsers.pyx", line 912, in pandas._libs.parsers.TextReader._read_low_memory (pandas\_libs\parsers.c:11138)
File "pandas/_libs/parsers.pyx", line 966, in pandas._libs.parsers.TextReader._read_rows (pandas\_libs\parsers.c:11884)
File "pandas/_libs/parsers.pyx", line 953, in pandas._libs.parsers.TextReader._tokenize_rows (pandas\_libs\parsers.c:11755)
File "pandas/_libs/parsers.pyx", line 2184, in pandas._libs.parsers.raise_parser_error (pandas\_libs\parsers.c:28765)
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 5, saw 7
我需要一些帮助来解决这个问题。我甚至试图在read_表中添加"error_bad_lines=False"
,但这没用。在
有没有更好的方法来阅读这些文本文件。请帮忙!在
在将
test.txt
文件保存为您复制的文件后,我想出了几个解决方案。在运行中:
^{pr2}$总之,如果您事先知道要解析为
NaN
的'/'
字符串,那么将它们全部传递给pd.read_table
的na_values
参数应该是最佳选择。在apply(pd.to_numeric)
解决方案使用了一点暴力,尽管您可以将其限制为仅包含“/”的行以使其更好。在相关问题 更多 >
编程相关推荐