我有这样的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()操作吗?
答案 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