我是一个python新手,尝试预处理timeseries数据,这样当对象在一系列节点和边上移动时,我可以计算一些更改,这样我就可以计算站点数,将它们聚合到路由中,并了解路由上的行为。数据最初是以两个CSV文件的形式出现的(entrance,Typedoc=0和clearance,Typedoc=1,每个文件大约85k行/19MB),我将它们合并成一个文件并执行了一些维度缩减。我已经设法把它放入一个多索引数据帧中。下面是一个片段:
In [1]: movements.head()
Out[1]:
Typedoc Port NRT GRT Draft
Vessname ECDate
400 L 2012-01-19 0 2394 2328 7762 4.166667
2012-07-22 1 2394 2328 7762 17.000000
2012-10-29 0 2395 2328 7762 6.000000
A 397 2012-05-27 1 3315 2928 2928 18.833333
2012-06-01 0 3315 2928 2928 5.250000
我有兴趣了解每个级别在穿越其时间序列时的变化。最后,我将把它表示为一个图形。我想我真的很喜欢字典形式的这些数据,其中一个唯一的Vessname的每个条目本质上都是一个标记化的沿途站点字符串:
^{pr2}$其中嵌套列表值为:
[ECDate, Typedoc, Port, Draft]
如果i=0,那么我感兴趣的值是停留时间和通过时间以及吃水深度的变化,计算如下:
t_dwell = stops_dict['400 L'][i+1][0] - stops_dict['400 L'][i][0]
d_draft = stops_dict['400 L'][i+1][3] - stops_dict['400 L'][i][3]
i += 1
以及
t_transit = stops_dict['400 L'][i+1][0] - stops_dict['400 L'][i][0]
假设所有的数据类型都是正确的(这是一个很大的假设,因为我还没有掌握如何让pandas解析我的日期)。然后我将提取链接作为某种形式:
link = str(stops_dict['400 L'][i][2])+'->'+str(stops_dict['400 L'][i+1][2]),t_transit,d_draft
t逯transit和d_draft值作为边权重。节点是唯一的端口值列表,这些值被分配到“400L”:[t tu dwell,NRT,GRT]k,v pairs(不知何故)。我还没有完全弄清楚,但我觉得我不需要帮助。在
我想不出一个更简单的方法,所以我尝试定义一个需要重新开始的函数,方法是将已排序的数据帧写入,然后用以下方法读回:
with open(filename,'sb) as csvfile:
datareader = csv.reader(csvfile, delimiter=",")
next(datareader, None)
<FLOW CONTROL> #based on Typedoc and ECDate values
函数将添加到空字典:
stops_dict = {}
def createStopsDict(row):
#this reads each row in a csv file,
#creates a dict entry from row[0]: Vessname if not in dict
#or appends things after row[0] to the dict entry if Vessname in dict
ves = row[0]
if ves in stops_dict:
stops_dict[ves].append(row[1:])
else:
stops_dict[ves]=[row[1:]]
return
这是一种效率低下的做事方式。。。 我可能会用iterrows而不是csv阅读器。。。 我研究过熔化和未堆积,我不认为这些是正确的。。。 基本上,我没能成功地实现这一点,因为我还没能正确地实现这一点。。。在
有没有一种更简单,我敢说是“优雅”的方法,将基于多索引值的数据帧行直接映射到可重用的数据结构中(现在是字典stop-dict)。在
我不受词典或其结构的束缚,所以如果有更好的方法,我愿意接受建议。在
谢谢!在
更新2: 我想我已经弄清楚了。。。 从我最初的数据帧移动开始:
movements.reset_index().apply(
lambda x: makeRoute(x.Vessname,
[x.ECDate,
x.Typedoc,
x.Port,
x.NRT,
x.GRT,
x.Draft]),
axis=1
)
其中:
routemap = {}
def makeRoute(Vessname, info):
if Vessname in routemap:
route = routemap[Vessname]
route.append(info)
else:
routemap[Vessname] = [info]
return
在我需要通过调用list元素来计算事物的结构中,返回一个键控到Vessname的字典。在
目前没有回答
相关问题 更多 >
编程相关推荐