2

Pandas を使用すると、CSV ファイルを非常に簡単に読み取ることができます。

pd.read_table('data.txt', sep=',')

Pandas は、キーと値のペアを持つファイルに似たものを持っていますか? 私はこれを思いついた:

pd.DataFrame([dict([p.split('=') for p in l.split(',')]) for l in open('data.txt')])

組み込みでない場合は、おそらくもっと慣用的なものでしょうか?

対象のファイルは次のようになります。

symbol=ESM3,exchange=GLOBEX,timestamp=1365428525690751,price=1548.00,quantity=551
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525697183,price=1548.00,quantity=551
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525714498,price=1548.00,quantity=551
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525734967,price=1548.00,quantity=551
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525735567,price=1548.00,quantity=555
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525735585,price=1548.00,quantity=556
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525736116,price=1548.00,quantity=556
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525740757,price=1548.00,quantity=556
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525748502,price=1548.00,quantity=556
symbol=ESM3,exchange=GLOBEX,timestamp=1365428525748952,price=1548.00,quantity=557

すべての行にまったく同じキーがあり、同じ順序になっています。null 値はありません。生成されるテーブルは次のとおりです。

  exchange    price quantity symbol         timestamp
0   GLOBEX  1548.00    551\n   ESM3  1365428525690751
1   GLOBEX  1548.00    551\n   ESM3  1365428525697183
2   GLOBEX  1548.00    551\n   ESM3  1365428525714498
3   GLOBEX  1548.00    551\n   ESM3  1365428525734967
4   GLOBEX  1548.00    555\n   ESM3  1365428525735567
5   GLOBEX  1548.00    556\n   ESM3  1365428525735585
6   GLOBEX  1548.00    556\n   ESM3  1365428525736116
7   GLOBEX  1548.00    556\n   ESM3  1365428525740757
8   GLOBEX  1548.00    556\n   ESM3  1365428525748502
9   GLOBEX  1548.00    557\n   ESM3  1365428525748952

(持ち込んだ後\nquantityで削除できます。)rstrip()

4

2 に答える 2

4

キー名が事前にわかっていて、名前が常に同じ順序で表示される場合は、コンバーターを使用してキー名を切り捨て、namesパラメーターを使用して列に名前を付けることができます。

import pandas as pd

def value(item):
    return item[item.find('=')+1:]

df = pd.read_table('data.txt', header=None, delimiter=',',
                   converters={i:value for i in range(5)},
                   names='symbol exchange timestamp price quantity'.split())
print(df)

投稿されたデータの利回りについて

  symbol exchange         timestamp    price quantity
0   ESM3   GLOBEX  1365428525690751  1548.00      551
1   ESM3   GLOBEX  1365428525697183  1548.00      551
2   ESM3   GLOBEX  1365428525714498  1548.00      551
3   ESM3   GLOBEX  1365428525734967  1548.00      551
4   ESM3   GLOBEX  1365428525735567  1548.00      555
5   ESM3   GLOBEX  1365428525735585  1548.00      556
6   ESM3   GLOBEX  1365428525736116  1548.00      556
7   ESM3   GLOBEX  1365428525740757  1548.00      556
8   ESM3   GLOBEX  1365428525748502  1548.00      556
9   ESM3   GLOBEX  1365428525748952  1548.00      557
于 2013-04-09T17:14:39.913 に答える