2013-02-22 22 views
34

ファイルに格納されたデータを使用してデータフレームを作成する必要があります。そのために私はread_csvメソッドを使いたいです。しかしながら、セパレータはそれほど規則的ではない。一部の列はタブ(\t)で区切られ、他の列はスペースで区切られています。さらに、いくつかの列は2つまたは3つ以上のスペースで、またはスペースとタブの組み合わせ(たとえば3つのスペース、2つのタブ、1つのスペース)で区切ることもできます。read_csvで区切り記号をより柔軟な空白にするには?

パンダにこれらのファイルを適切に扱うように指示する方法はありますか?

ところで、私はPythonを使用する場合、私はこの問題はありません。私は使用します:

for line in file(file_name): 
    fld = line.split() 

それは完璧に動作します。フィールド間に2または3のスペースがあるかどうかは気にしません。スペースとタブを組み合わせても問題はありません。パンダは同じことができますか?

答えて

58

documentationから、あなたは正規表現またはdelim_whitespaceいずれかを使用することができます。

>>> import pandas as pd 
>>> for line in open("whitespace.csv"): 
...  print repr(line) 
...  
'a\t b\tc 1 2\n' 
'd\t e\tf 3 4\n' 
>>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+") 
    0 1 2 3 4 
0 a b c 1 2 
1 d e f 3 4 
>>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True) 
    0 1 2 3 4 
0 a b c 1 2 
1 d e f 3 4 
+1

また、 'skipinitialspace'を使って初期空間をスキップすることもできます – jarondl

5
>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+") 

がセパレータとしてスペースとタブの任意の数の任意の組み合わせを使用します。

0

これは、すべての組み合わせと0回以上の発生を考慮していると考えられます。

pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*") 
0

パンダのみ、2人のCSVリーダーを有し冗長主要ホワイトスペースについて柔軟である:

pd.read_csv("whitespace.csv", skipinitialspace=True) 

一つはどちら

pd.DataFrame.from_csv("whitespace.csv") 
ませんアウトボックス柔軟です後続の空白については、正規表現による回答を参照してください。 delim_whitespaceを避けてください。スペースで区切って(\ tをつけずに)セパレータとしても使えるからです。

関連する問題