0

前回の投稿で、read_table()pandas 関数は構文を使用すると可変長の空白を区切り文字として処理できることがわかりましたread_table('datafile', sep=r'\s*')。これは私のファイルの多くでうまく機能しますが、非常に類似しているにもかかわらず、他のファイルでは機能しません。

編集:他の人が試したときに問題を再現できなかった例を投稿しました。そのため、 AY907538AY942707の元のファイルへのリンクを投稿し、解決できないエラー メッセージを残しています。

## filename:AY942707
# this will load with no problem
data = read_table('AY942707.hmmdomtblout', header=None, skiprows=3, sep=r'\s*')

## filename: AY907538
data = read_table('AY907538.hmmdomtblout', header=None, skiprows=3, sep=r'\s*')

次のエラーが生成されます。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-131d10d1fb1d> in <module>()
      2 
      3 #temp = get_dataset('AY907538.hmmdomtblout')
----> 4 data = read_table('AY907538.hmmdomtblout', header=None, skiprows=3, sep=r'\s*')
      5 #data = read_table('AY942707.hmmdomtblout', header=None, skiprows=3, sep=r'\s*')

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.pyc in read_table(filepath_or_buffer, sep, dialect, header, index_col, names, skiprows, na_values, thousands, comment, parse_dates, keep_date_col, dayfirst, date_parser, nrows, iterator, chunksize, skip_footer, converters, verbose, delimiter, encoding, squeeze)
    282     kwds['encoding'] = None
    283 
--> 284     return _read(TextParser, filepath_or_buffer, kwds)
    285 
    286 @Appender(_read_fwf_doc)

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.pyc in _read(cls, filepath_or_buffer, kwds)
    189         return parser
    190 
--> 191     return parser.get_chunk()
    192 
    193 @Appender(_read_csv_doc)

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.pyc in get_chunk(self, rows)
    779             msg = ('Expecting %d columns, got %d in row %d' %
    780                    (col_len, zip_len, row_num))
--> 781             raise ValueError(msg)
    782 
    783         data = dict((k, v) for k, v in izip(self.columns, zipped_content))

ValueError: Expecting 26 columns, got 28 in row 6
4

1 に答える 1

1

両方のファイルの最後のフィールドdescription of targetには、複数の単語が含まれています。空白はセパレータとして使用されるため、read_table ではdescription of target1 つの列として扱われません。このフィールドの各単語は、異なる列にあります。AY942707最初description of targetの行には、他のすべての行よりも多くの単語が含まれていますが、これは AY907538 には当てはまりません。read_tableは、最初の行からの列数を決定し、後続のすべての行は、同じかそれよりも少ない列数を持つ必要があります。

于 2012-08-20T07:55:49.290 に答える