97

read_csvメソッドを使用して、ファイルからデータを読み込んでデータ フレームを作成する必要があります。ただし、セパレーターはあまり規則的ではありません。タブ ( \t) で区切られている列もあれば、スペースで区切られている列もあります。さらに、一部の列は、2 つまたは 3 つ以上のスペース、またはスペースとタブの組み合わせ (たとえば、3 つのスペース、2 つのタブ、1 つのスペース) で区切ることができます。

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

ちなみに、Pythonを使えばこの問題はありません。私が使う:

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

そして、それは完璧に機能します。フィールド間に 2 つまたは 3 つのスペースがあってもかまいません。スペースとタブの組み合わせでも問題ありません。パンダは同じことができますか?

4

4 に答える 4

150

ドキュメントから、正規表現または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
于 2013-02-22T14:51:51.297 に答える
14
>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+")

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

于 2016-12-25T11:32:28.703 に答える
2

これにより、すべての組み合わせとゼロ回以上の出現を処理できると考えることができます。

pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*")
于 2017-10-27T04:26:58.690 に答える