web-dev-qa-db-ja.com

テキストをpandasに複数の区切り文字でインポート

次のようなデータがあります。

c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3

私はそれを3列のデータフレームにインポートしたい.

a , b, c
1,  1, 0.5
etc

「:」で分割された2つの列としてデータを読み取り、「」で最初の列を分割しようとしています。しかし、私はそれが面倒だと思っています。インポート時に直接ソートするより良い方法はありますか?

現在:

data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C'])
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B'])

しかし、これは私のデータが先頭のスペースを持っているという事実によってさらに複雑です...

これは単純なタスクであるように感じますが、現在は行ごとに読み取り、検索置換を使用してインポート前にデータをサニタイズすることを考えています。

15
CastleH

1つの方法は、pythonエンジンによって許可された正規表現の区切り文字を使用することです。たとえば:

>>> !cat castle.dat
c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3
>>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
                     sep=' |:', engine='python')
>>> df
   a  b    c
0  1  1  0.5
1  1  2  6.5
2  1  3  5.3
26
DSM