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

您只需分两个步骤即可完成:首先读取数据,然后对其进行整形。
例如:

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 回答