0

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

requests_per_sec, 9:00, 100
requests_per_sec, 9:01, 101
...
response_time, 9:00, 40ms
repsonse_time, 9:01, 42ms
...
error_rate, 9:00, 0.01
...

だから私はこれを持っています:

pd.read_csv(csv_data,index_col=[1], names= ['metric', 'time', 'value'], parse_dates=True)

これにより、メトリックと値の列を持つ、時間でインデックス付けされたデータフレームが得られます。しかし、同じ列に 3 つのデータ セットがなく、3 つの独立した系列 (requests_per_sec、response_time、error_rate) がないように、そのデータフレームを分割する必要があります。read_csv から直接それを行う方法はありますか? それとも、.groupby() または .select() 操作が必要ですか?

4

1 に答える 1

1

2 つの別々の手順で実行できます。最初にデータを読み取り、次にそれを再形成します。
例えば:

import pandas as pd
from StringIO import StringIO

s = """metric,timestamp,datapoint
A,2013-01-01,1
A,2013-01-02,5
A,2013-01-03,8
B,2013-01-01,2
B,2013-01-02,3
B,2013-01-03,4
C,2013-01-01,8
C,2013-01-02,7
C,2013-01-03,6"""

まず、データを読み取るだけです。

In [4]: df = pd.read_csv(StringIO(s), parse_dates=[1])

In [5]: df
Out[5]:
  metric           timestamp  datapoint
0      A 2013-01-01 00:00:00          1
1      A 2013-01-02 00:00:00          5
2      A 2013-01-03 00:00:00          8
3      B 2013-01-01 00:00:00          2
4      B 2013-01-02 00:00:00          3
5      B 2013-01-03 00:00:00          4
6      C 2013-01-01 00:00:00          8
7      C 2013-01-02 00:00:00          7
8      C 2013-01-03 00:00:00          6

次に、それを変換できます。この場合pivotは、さまざまなメトリックの列を作成するために形状を変更します。

In [7]: df.pivot(index='timestamp', columns='metric', values='datapoint')
Out[7]:
metric      A  B  C
timestamp
2013-01-01  1  2  8
2013-01-02  5  3  7
2013-01-03  8  4  6
于 2013-08-07T07:32:04.963 に答える