2017-05-04 6 views
4

状況

を使用してCSVファイルを読み込むときに、私は次のような特徴を持っているCSVのようなファイルからパンダのデータフレームを作成する必要があります。パンダ:エラー `sep`と` comment`引数

  • ファイルで使用される区切り文字は、カンマまたはスペースのどちらでもかまいません。ファイルがどのファイルに含まれるかは事前にわかりません。
  • ファイルの先頭には、1つ以上のコメント行があります。この行は、#で始まります。

問題

私は、引数sep=Nonecomment='#'pd.read_csv方法でこれに取り組むことを試みました。私の理解では、sep=None引数は、pandasに区切り文字を自動検出するように指示し、comment='#'引数は、#で始まるすべての行が無視すべきコメント行であることをpandasに伝えます。

これらの引数は、個別に使用すると問題なく動作します。しかし、両方を一緒に使用すると、エラーメッセージTypeError: expected string or bytes-like objectが表示されます。次のコード例は、このことを示しています。

from io import StringIO 
import pandas as pd 

# Simulated data file contents 
tabular_data = (
    '# Data generated on 04 May 2017\n' 
    'col1,col2,col3\n' 
    '5.9,7.8,3.2\n' 
    '7.1,0.4,8.1\n' 
    '9.4,5.4,1.9\n' 
) 

# This works 
df1 = pd.read_csv(StringIO(tabular_data), sep=None) 
print(df1) 

# This also works 
df2 = pd.read_csv(StringIO(tabular_data), comment='#') 
print(df2) 

# This will give an error 
df3 = pd.read_csv(StringIO(tabular_data), sep=None, comment='#') 
print(df3) 

残念ながら、私は本当にエラーをトリガしているものを理解していません。誰でも私にこの問題を解決する助けを与えることができるでしょうか?

答えて

4

はこのお試しください:

In [186]: df = pd.read_csv(StringIO(tabular_data), sep=r'(?:,|\s+)', 
          comment='#', engine='python') 

In [187]: df 
Out[187]: 
    col1 col2 col3 
0 5.9 7.8 3.2 
1 7.1 0.4 8.1 
2 9.4 5.4 1.9 

'(?:,|\s+)'を - 、コンマまたは連続したスペース/タブの任意の数の

+0

この作品のいずれかを選択するための正規表現ですありがとう! 1つのフォローアップの質問:さらに、複数の連続するスペースを区切り文字として認識させることはできますか?私は 'sep = r '(\ s +)|、' 'を使ってみましたが、これは私に奇妙な結果を与えています。 – Xukrao

+1

@Xukrao、確かに、更新された答えを見てください – MaxU