我是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等)。我怎么用简单的循环来做到这一点?
答案 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()