【问题标题】:possible inconsistency in text handling of pandas read_table() functionpandas read_table() 函数的文本处理可能存在不一致
【发布时间】:2012-08-20 02:04:05
【问题描述】:

previous post 中,我发现如果使用read_table('datafile', sep=r'\s*') 构造,pandas read_table() 函数可以将可变长度的空格作为分隔符处理。虽然这对我的许多文件都非常有用,但尽管高度相似,但它不适用于其他文件。

编辑: 当其他人尝试时,我发布了无法复制问题的示例。因此,我发布了 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

【问题讨论】:

  • 尝试将您的样本数据减少到更小(最好是单行),但仍能证明问题。
  • @BrenBarn。将其归结为仅几个条目,因为我想留下一些以进行比较。错误条目说第六行是问题。您认为 i-Evalue 中较短的值 - 4.6 - 可能是问题吗?
  • 为我工作。因此,ISTM 要么在发布过程或我的复制过程中丢失了某些东西,要么我们使用了不同的 pandas 版本。 [我说的是 0.8.1,但我不记得我是否使用签出副本。]
  • 嗯。让我检查一下我的版本并复制我发布的数据,看看我是否可以复制错误。
  • @DMS 感谢您检查数据。我是0.8。也是。但是,当我将发布的网页数据复制/粘贴回文本文件并读入时,我也没有问题。你认为这可能与硬回报有关吗?

标签: python pandas


【解决方案1】:

两个文件中的最后一个字段description of target 包含多个单词。由于使用空格作为分隔符,description of target 不会被 read_table 视为单个列。此字段中的每个单词都在不同的列中。在AY942707 中,第一个description of target 包含的单词比其他所有行都多,而在AY907538 中不是这种情况。 read_table 确定第一行的列数,所有后续行的列数应相等或更少。

【讨论】:

  • 感谢您查看此内容。我认为找到答案可能对 pandas 有帮助,但我认为在这种情况下,在加载到 pandas 之前进行一些预先准备是最好的方法。再次感谢。
猜你喜欢
  • 2017-06-01
  • 2020-10-09
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多