簡體   English   中英

導入文本文件:沒有要從文件中解析的列

[英]Importing text file : No Columns to parse from file

我正在嘗試從 sys.stdin 獲取輸入。 這是hadoop的map減速器程序,輸入文件為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 中)嘗試這個,它工作正常。

我試圖查看 stackoverflow 帖子,其中一篇帖子建議嘗試並排除。 應用它給我留下一個空文件。 有人可以幫忙嗎? 謝謝

使用try和except只是讓你繼續盡管有錯誤並處理它們。 它不會神奇地修復你的錯誤。

read_csv需要csv文件,你的輸入顯然不是。 快速瀏覽一下文檔:

delim_whitespace:布爾值,默認為False

指定是否將空格(例如''或'')用作sep。 相當於設置sep ='+ s'。 如果此選項設置為True,則不應為delimiter參數傳遞任何內容。

這似乎是正確的論點。 采用

pandas.read_csv(filepath_or_buffer, delim_whitespace=True).

除非標簽被展開(用空格替換),否則使用delimiter='\\t'也應該有效。 我們無法delim_whitespacedelim_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM