pandas read_csv:从单个列中拉出多个系列

时间:2013-08-07 06:37:59

标签: csv pandas

我有这样的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)

它为我提供了一个按时间索引的数据框,其中包含列:metric和value。但我需要拆分该数据帧,以便在同一列中没有3个数据集,而是3个独立的系列(requests_per_sec,response_time和error_rate)。有没有办法直接从read_csv做到这一点?或者我需要一些.groupby()或.select()操作吗?

1 个答案:

答案 0 :(得分:1)

您可以通过两个单独的步骤来完成:首先读取数据,然后重新塑造它 E.g:

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