0

趣味-Pythonは初めて

こんにちは。WesMcKinneyのPythonforDataAnalysisの本を読んでいます。MovieLens 1Mデータセットの作業を開始したばかりですが、一生の間、ratings.datファイルでコードを機能させることができません。movies.datファイルとusers.datファイルでは正常に機能しますが、ratings.datファイルでエラーが発生し続けます。githubとmovielens.orgからratings.datのコピーをダウンロードしましたが、同じエラーが発生します。ファイルの名前を変更しましたが、それでも同じエラーが発生します。別のディレクトリに移動しましたが、それでも同じエラーが発生します。設定に問題があると思いますか?


Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
%guiref   -> A brief reference about the graphical user interface.

Welcome to pylab, a matplotlib-based Python environment [backend: TkAgg].
For more information, type 'help(pylab)'.

import pandas as pd

rnames = ['user_id','movie_id','rating','timestamp']

ratings = pd.read_table('e:\ratings.dat',sep='',header=None,names=rnames)

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-1-5513dd9baafa> in <module>()
      3 rnames = ['user_id','movie_id','rating','timestamp']
      4 
----> 5 ratings = pd.read_table('e:\ratings.dat',sep='',header=None,names=rnames)
      6 

E:\Python27_new\lib\site-packages\pandas\io\parsers.pyc in parser_f(filepath_or_buffer, sep, dialect, compression, doublequote, escapechar, quotechar, quoting, skipinitialspace, lineterminator, header, index_col, names, prefix, skiprows, skipfooter, skip_footer, na_values, true_values, false_values, delimiter, converters, dtype, usecols, engine, delim_whitespace, as_recarray, na_filter, compact_ints, use_unsigned, low_memory, buffer_lines, warn_bad_lines, error_bad_lines, keep_default_na, thousands, comment, decimal, parse_dates, keep_date_col, dayfirst, date_parser, memory_map, nrows, iterator, chunksize, verbose, encoding, squeeze)
    397                     buffer_lines=buffer_lines)
    398 
--> 399         return _read(filepath_or_buffer, kwds)
    400 
    401     parser_f.__name__ = name

E:\Python27_new\lib\site-packages\pandas\io\parsers.pyc in _read(filepath_or_buffer, kwds)
    206 
    207     # Create the parser.
--> 208     parser = TextFileReader(filepath_or_buffer, **kwds)
    209 
    210     if nrows is not None:

E:\Python27_new\lib\site-packages\pandas\io\parsers.pyc in __init__(self, f, engine, **kwds)
    505             self.options['has_index_names'] = kwds['has_index_names']
    506 
--> 507         self._make_engine(self.engine)
    508 
    509     def _get_options_with_defaults(self, engine):

E:\Python27_new\lib\site-packages\pandas\io\parsers.pyc in _make_engine(self, engine)
    607     def _make_engine(self, engine='c'):
    608         if engine == 'c':
--> 609             self._engine = CParserWrapper(self.f, **self.options)
    610         else:
    611             if engine == 'python':

E:\Python27_new\lib\site-packages\pandas\io\parsers.pyc in __init__(self, src, **kwds)
    888         # #2442
    889         kwds['allow_leading_cols'] = self.index_col is not False
--> 890         self._reader = _parser.TextReader(src, **kwds)
    891 
    892         # XXX

E:\Python27_new\lib\site-packages\pandas\_parser.pyd in pandas._parser.TextReader.__cinit__ (pandas\src\parser.c:2771)()

E:\Python27_new\lib\site-packages\pandas\_parser.pyd in pandas._parser.TextReader._setup_parser_source (pandas\src\parser.c:4810)()

atings.dat does not exist

エラーの最後の行では、常にファイル名の最初の部分が切り捨てられています。前述のように、同じコードがmovies.datとusers.datで正常に機能します。

4

2 に答える 2

2

e:\ratings.datソースパスにエスケープを追加してみてくださいe:\\ratings.dat

于 2013-02-25T06:26:40.207 に答える
1

パス文字列を生の文字列として記述する必要があります (そのr前に注意してください)。

ratings = pd.read_table(r'e:\ratings.dat', sep='', header=None, names=rnames)

これが機能しなかった理由\rは、ファイルパスの一部ではない特別な意味 (改行) があるためです。つまり、python はファイルを見つけることができません。生の文字列はすべての特殊文字をエスケープします。
これは以下で確認できます。

In [1]: print ('\r')


In [2]: print (r'\r')
\r

\同様に、@pravin が示唆するように (を使用して)、すべての文字を「エスケープ」できます\\

于 2013-02-25T10:42:05.260 に答える