繁体   English   中英

使用 Python 创建和排序时间戳数据的最快方法?

[英]Fastest way of creating and sorting the timestamp data with Python?

假设我将有两个 arrays。 第一行将指定时间戳,第二行将是数据。

timeStamp = ['0001','0002','0003',...,'9999']

data = [6234,2372,1251,...,5172]

存储它们的最佳方式是什么? 假设我想将数据从最小到更大的数字进行排序,同时保持它们的时间戳值附加到它们上面?

取决于你想如何使用它。 如果你想 go 没有附加库,我会使用类似的东西

result = sorted(({"timestamp": ts, "data": data} for ts, data in zip(timeStamp, data)), key=lambda d:d["data"]

这基本上是按数据排序的字典列表。 我将 go 用于字典列表,因为与元组列表相比,它更具表现力。

您可以使用二维数组。 您可以使用

timestamp_data = [ [timeStamp[i], data[i]] for i in range(len(timeStamp)) ]

现在,您可以使用

sorted_timestamp_data = sorted(timestamp_data, key=lambda row: row[1])

字典对你来说非常有用。 您可以zip datatimeStamp并按data排序,然后将元组转换为dict (字典保留插入顺序)。 然后您将拥有数据-时间戳对,其中数据是键,时间戳是值。

out = dict(sorted(zip(data, timeStamp)))

Output:

{1251: '0003', 2372: '0002', 5172: '9999', 6234: '0001'}

如果您想要 2 个单独的列表,则可以执行以下操作。 不要强制转换为 dict 构造函数,而是解压到列表:

data[:], timeStamp[:] = zip(*sorted(zip(data,timeStamp)))

Output:

[1251, 2372, 5172, 6234], ['0003', '0002', '9999', '0001']

要按照您描述的方式组织数据,您可以简单地执行以下操作:

sorted(zip(timeStamp, data), key=lambda x: x[1])

或者

from operator import itemgetter

sorted(zip(timeStamp, data), key=itemgetter(1))

要存储这个 object,你可以pickle它, 这里有一个很好的描述。 显然,有很多选项可以存储它。

有多种方法可以做到这一点。 让我们获取以下数据 -

timeStamp = [9,1,2,3,9999]
data = [1245, 6234,2372,1251,5172]

使用基础 python 和 zip

处理数据的默认方式,特别是列表。 zip方法允许您按字面意思 zip 两个或多个列表元素,创建一个元组列表。 然后,您可以使用sorted与 lamda function 按元素的特定 position 对组合列表进行排序。

l = zip(timeStamp, data) #storing 2 arrays by attaching them elementwise
print(sorted(l, key=lambda x: x[0]))
[(1, 6234), (2, 2372), (3, 1251), (9, 1245), (9999, 5172)]

使用 numpy 和 argsort

Numpy 允许您使用多维 arrays。 对于 2 个列表,您可以简单地将它们np.stack一起创建一个 2D 数组。

为了排序,您可以在第一列(时间戳)上使用argsort() ,它返回已排序的有序列的索引。 然后,您可以使用这些索引来索引原始二维数组,以按时间戳获取数组的排序顺序。

arr = np.stack([timeStamp, data])
arr[:,arr[0].argsort()]
array([[   1,    2,    3,    9, 9999],
       [6234, 2372, 1251, 1245, 5172]])

使用 pandas datafames 和 sort_values

最后,同时处理多个列表的最佳方法是将它们视为 DataFrame 中的列。 Pandas 提供了一个方便的框架来处理列/行排列的数据,在这种情况下非常有用,因为您还可以使用列名来标识每个数组/列。

sort_values允许您根据列名快速对完整数据进行排序。

import pandas as pd

df = pd.DataFrame(zip(timeStamp, data), columns=['timeStamp','data'])
print(df.sort_values('timeStamp'))
   timeStamp  data
1          1  6234
2          2  2372
3          3  1251
0          9  1245
4       9999  5172

嗯,这很简单

records = list(zip(data, timeStamp))

排序:

records.sort()

在 Python 中,元组从左到右按元素进行比较,因此在这种情况下不需要提供键 function。 而已。 正如在一些评论中那样,没有必要让它过于复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM