用pandas绘制两个变量之间的关系

时间:2016-06-22 11:47:20

标签: python pandas data-visualization

我是python的新手,但我知道 pandas 的用处,因此我想请问是否有人可以帮助我使用pandas来解决以下问题。

我有一个带总线的数据集,如下所示:

BusModel;BusID;ModeName;Value;Unit;UtcTime
Alpha;0001;Engine hours;985;h;2016-06-22 19:58:09.000
Alpha;0001;Engine hours;987;h;2016-06-22 21:58:09.000
Alpha;0001;Engine hours;989;h;2016-06-22 23:59:09.000
Alpha;0001;Fuel consumption;78;l;2016-06-22 19:58:09.000
Alpha;0001;Fuel consumption;88;l;2016-06-22 21:58:09.000
Alpha;0001;Fuel consumption;98;l;2016-06-22 23:59:09.000

该文件为.csv格式,以分号(;)分隔。请注意,我想根据UtcTime计算“发动机小时数”和“燃油消耗量”之间的关系,“计算每天的平均值”。此外,我想绘制数据集中所有总线的图形(不仅是0001而且还有0002,0003等)。我怎么用简单的循环来做到这一点?

2 个答案:

答案 0 :(得分:2)

从以下交互模式开始

import pandas as pd

df = pd.read_csv('bus.csv', sep=";", parse_dates=['UtcTime'])

您应该能够开始使用DataFrame并发现可以直接用于数据的功能。要通过ID获取公交车列表,请执行以下操作:

>>> bus1 = df[df.BusID == 1]
>>> bus1

用您需要的公交车ID替换1。这将返回一个子{ - 1}}。要获得BusID 1和发动机营业时间,请执行以下操作:

DataFrame

您可以通过执行

快速获取列的统计信息
>>> bus1[bus1.ModeName == "Engine hours"]

对所需数据进行分组后,您可以开始绘图:

>>> bus1.Value.describe()

对文档有更多解释。请参阅http://pandas.pydata.org/pandas-docs/stable/

答案 1 :(得分:1)

如果你真的想要使用熊猫,请记住这个简单的事情:永远不要使用循环。循环不可伸缩,因此请尝试使用内置函数。首先让我们阅读您的数据框:

import pandas as pd
data = pd.read_csv('bus.csv',sep = ';')

这是我的答案的弱点,我不知道如何有效地管理日期。因此,创建一个名为day的列,其中包含来自UtcTime的日期(我会使用像这样data['day'] = data['UtcTime'].apply(lambda x: x[:10])的应用方法,但它是一个隐藏的循环,所以不要这样做!)

然后仅采用单个总线的数据,尝试切片方法:

data_bus1 = data[data.BusID == 1]

最后使用groupby函数:

data_bus1[['Modename','Value','day']].groupby(['ModeName','day'],as_index = False).mean()

或者如果您不需要在不同的数据帧中分离您的总线,您可以在整个数据上使用groupby

data[['BusID','ModeName','Value','day']].groupby(['BusID','ModeName','day'],as_index = False).mean()