2016-10-22 8 views
4

sys.stdinから入力を取得しようとしています。これはhadoop用の地図縮小プログラムです。入力ファイルはtxt形式です。テキストファイルをインポート中:いいえ、ファイルから解析する列

: - delimiter = \t, header=False,defining column name 何も動いていないようにみえて、私も試してみました

import sys 
df = pd.read_csv(sys.stdin,error_bad_lines=False) 

、私は取得していますエラーは、このエラーで私がしようとしている

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 

コード:データセットのプレビュー

[[email protected] 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(ハイドープではない)で直接試してみると、うまくいきます。

私はstackoverflowの投稿を調べようとしましたが、投稿の1つがtryとexceptを提案しました。それを適用すると空のファイルが残ってしまいます。 誰でも助けることができますか?ありがとう

答えて

3

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.

これは正しい議論のようです。タブが展開されない限り、また、(スペースで置き換え)、動作するはずdelimiter='\t'を使用して

pandas.read_csv(filepath_or_buffer, delim_whitespace=True). 

を使用してください。我々は本当に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.pymid-1-mapper.pyの出力を処理します。 u.dataファイルの内容を処理する場合は、sys.stdinではなく、ファイルの読み取りを検討してください。

+0

インポートSYS PD としてインポートパンダ__name__ == '__main__' の場合: DF = pd.read_csv(sys.stdinを、ヘッダ=なし、delim_whitespace = TRUE) 印刷DF – mezz

+0

は同じエラーを取得。 – mezz

+0

Pythonスクリプトの中から 'sys.stdin'を印刷できますか(' mid-1-reducer.py'は重要です)?単に 'readlines'関数かそれに類するものを使うことができます。それはあなたの質問にあなたが印刷した入力と同じ出力を与えますか? – DerWeh

0

空白をセパレータとして使用するには、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 
関連する問題