2016-08-30 1 views
5

Python(3.4.3)でパンダ(0.18.1)のread_fwf関数を使用して固定幅ファイルを読み込むと、引数commentを使用してコメント文字を指定してください。私は、コメント文字で始まるすべての行が無視されることを期待していました。ただし、任意の列のファイルの最初の列をcolspecsに指定しないと、コメント文字は使用されていないように見えます。Pythonのpandasのread_fwfは、最初の列が含まれていない場合、コメント文字を使用しません

import io, sys 
import pandas as pd 

sys.version 
# '3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)]' 
pd.__version__ 
# '0.18.1' 

# Two input files, first line is comment, second line is data. 
# Second file has a column (with the letter A) 
# that I don't want at start of data. 
string = "#\n1K\n" 
off_string = "#\nA1K\n" 

# When using skiprows to skip commented row, both work. 
pd.read_fwf(io.StringIO(string), colspecs = [(0,1), (1,2)], skiprows = 1, header = None) 
# 0 1 
# 0 1 K 

pd.read_fwf(io.StringIO(off_string), colspecs = [(1,2), (2,3)], skiprows = 1, header = None) 
# 0 1 
# 0 1 K 

# If a comment character is specified, it only works when the colspecs 
# includes the column with the comment character. 
pd.read_fwf(io.StringIO(string), colspecs = [(0,1), (1,2)], comment = '#', header = None) 
# 0 1 
# 0 1 K 

pd.read_fwf(io.StringIO(off_string), colspecs = [(1,2), (2,3)], comment = '#', header = None) 
#  0 1 
# 0 NaN NaN 
# 1 1.0 K 

具体的なドキュメントはありますか?単純な回避策は最初の列を含めてから削除することですが、これがバグか予想される動作を誤解しているかどうかを確認したいと考えました。

+0

コメントフラグのドキュメントは次のとおりです。http://pandas.pydata.org/pandas-docs/stable/io.html#comments-and-empty-lines – ode2k

答えて

5

これはバグだと書類の仕様書には、「行がコメントで始まっていれば、行全体がスキップされます」と書かれています。問題は、列がFixedWidthReader.__next__によってサブセット化されてから(PythonParserまたはCParserWrapper)コメントがチェックされることです。関連コードはio/parsers.pyです。

+0

Hm、私はそう思っていました。 [私はGithubで報告しました](https://github.com/pydata/pandas/issues/14135)、確認したら、私はこの回答を受け入れます。 – nograpes

関連する問題