导入文本文件:没有要从文件中解析的列
Importing text file : No Columns to parse from file
我正在尝试从 sys.stdin 获取输入。这是一个用于 hadoop 的 map reducer 程序。输入文件为txt格式。数据集预览:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
298 474 4 884182806
115 265 2 881171488
253 465 5 891628467
305 451 3 886324817
6 86 3 883603013
62 257 2 879372434
286 1014 5 879781125
200 222 5 876042340
210 40 3 891035994
224 29 3 888104457
303 785 3 879485318
122 387 5 879270459
194 274 2 879539794
291 1042 4 874834944
我一直在尝试的代码 -
import sys
df = pd.read_csv(sys.stdin,error_bad_lines=False)
我也试过 delimiter = \t, header=False,defining column name
似乎没有任何效果,我得到的错误是这个错误:
[root@sandbox lab]# cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
Traceback (most recent call last):
File "/root/lab/mid-1-reducer.py", line 8, in <module>
df = pd.read_csv(sys.stdin,delimiter='\t')
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 645, in parser_f
return _read(filepath_or_buffer, kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 388, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 729, in __init__
self._make_engine(self.engine)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 922, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1389, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "pandas/parser.pyx", line 538, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:5896)
pandas.io.common.EmptyDataError: No columns to parse from file
但是,如果我直接在 python(而不是在 hadoop 中)尝试这个,它工作正常。
我已经尝试查看 Whosebug posts,post 建议的 try and except 之一。应用它给我留下一个空文件。
有人可以帮忙吗?谢谢
使用 try 和 except 可以让您在出现错误的情况下继续并处理它们。它不会神奇地修复您的错误。
read_csv
需要 csv
个文件,而您的输入显然不是。快速查看文档:
delim_whitespace : boolean, default False
Specifies whether or not whitespace (e.g. ' ' or ' ') will be used as the sep. Equivalent to setting sep='+s'. If this option is set to True, nothing should be passed in for the delimiter parameter.
这似乎是正确的论点。使用
pandas.read_csv(filepath_or_buffer, delim_whitespace=True).
使用 delimiter='\t'
也应该有效,除非选项卡被扩展(由空格替换)。正如我们无法确定的那样,delim_whitespace
似乎是更好的选择。
如果这没有帮助,请打印出您的 sys.stdin
以检查您是否正确传递了文本。
编辑:
我刚刚看到你使用
cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
这是故意的吗,这样mid-1-reducer.py
处理mid-1-mapper.py
的输出。如果要处理文件 u.data
的内容,请考虑读取文件而不是 sys.stdin
.
您必须将 delim_whitespace
设置为 True,才能使用空格作为分隔符。
import sys
import pandas as pd
if __name__ == '__main__':
df = pd.read_csv(sys.stdin, header=None, delim_whitespace=True)
print df
我正在尝试从 sys.stdin 获取输入。这是一个用于 hadoop 的 map reducer 程序。输入文件为txt格式。数据集预览:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
298 474 4 884182806
115 265 2 881171488
253 465 5 891628467
305 451 3 886324817
6 86 3 883603013
62 257 2 879372434
286 1014 5 879781125
200 222 5 876042340
210 40 3 891035994
224 29 3 888104457
303 785 3 879485318
122 387 5 879270459
194 274 2 879539794
291 1042 4 874834944
我一直在尝试的代码 -
import sys
df = pd.read_csv(sys.stdin,error_bad_lines=False)
我也试过 delimiter = \t, header=False,defining column name
似乎没有任何效果,我得到的错误是这个错误:
[root@sandbox lab]# cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
Traceback (most recent call last):
File "/root/lab/mid-1-reducer.py", line 8, in <module>
df = pd.read_csv(sys.stdin,delimiter='\t')
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 645, in parser_f
return _read(filepath_or_buffer, kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 388, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 729, in __init__
self._make_engine(self.engine)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 922, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1389, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "pandas/parser.pyx", line 538, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:5896)
pandas.io.common.EmptyDataError: No columns to parse from file
但是,如果我直接在 python(而不是在 hadoop 中)尝试这个,它工作正常。
我已经尝试查看 Whosebug posts,post 建议的 try and except 之一。应用它给我留下一个空文件。 有人可以帮忙吗?谢谢
使用 try 和 except 可以让您在出现错误的情况下继续并处理它们。它不会神奇地修复您的错误。
read_csv
需要 csv
个文件,而您的输入显然不是。快速查看文档:
delim_whitespace : boolean, default False
Specifies whether or not whitespace (e.g. ' ' or ' ') will be used as the sep. Equivalent to setting sep='+s'. If this option is set to True, nothing should be passed in for the delimiter parameter.
这似乎是正确的论点。使用
pandas.read_csv(filepath_or_buffer, delim_whitespace=True).
使用 delimiter='\t'
也应该有效,除非选项卡被扩展(由空格替换)。正如我们无法确定的那样,delim_whitespace
似乎是更好的选择。
如果这没有帮助,请打印出您的 sys.stdin
以检查您是否正确传递了文本。
编辑: 我刚刚看到你使用
cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
这是故意的吗,这样mid-1-reducer.py
处理mid-1-mapper.py
的输出。如果要处理文件 u.data
的内容,请考虑读取文件而不是 sys.stdin
.
您必须将 delim_whitespace
设置为 True,才能使用空格作为分隔符。
import sys
import pandas as pd
if __name__ == '__main__':
df = pd.read_csv(sys.stdin, header=None, delim_whitespace=True)
print df