【发布时间】:2019-07-25 23:11:12
【问题描述】:
我知道与其他语言相比,python 循环本身相对较慢,但是当使用正确的函数时,它们会变得更快。 我有一个名为“acoustics”的熊猫数据框,其中包含超过 1000 万行:
print(acoustics)
timestamp c0 rowIndex
0 2016-01-01T00:00:12.000Z 13931.500000 8158791
1 2016-01-01T00:00:30.000Z 14084.099609 8158792
2 2016-01-01T00:00:48.000Z 13603.400391 8158793
3 2016-01-01T00:01:06.000Z 13977.299805 8158794
4 2016-01-01T00:01:24.000Z 13611.000000 8158795
5 2016-01-01T00:02:18.000Z 13695.000000 8158796
6 2016-01-01T00:02:36.000Z 13809.400391 8158797
7 2016-01-01T00:02:54.000Z 13756.000000 8158798
还有我写的代码:
acoustics = pd.read_csv("AccousticSandDetector.csv", skiprows=[1])
weights = [1/9, 1/18, 1/27, 1/36, 1/54]
sumWeights = np.sum(weights)
deltaAc = []
for i in range(5, len(acoustics)):
time = acoustics.iloc[i]['timestamp']
sum = 0
for c in range(5):
sum += (weights[c]/sumWeights)*(acoustics.iloc[i]['c0']-acoustics.iloc[i-c]['c0'])
print("Row " + str(i) + " of " + str(len(acoustics)) + " is iterated")
deltaAc.append([time, sum])
deltaAc = pd.DataFrame(deltaAc)
这需要大量的时间,我怎样才能使它更快?
【问题讨论】:
-
很好地删除
print将是一个很好的第一步 -
@SuperStew 我想跟踪进度
-
你运行的是什么版本的python?
acoustics是多久? -
@RehimAlizadeh 那么我只会打印 100k 的倍数之类的东西
-
通常在使用
pandas时,您不想使用for循环。看起来您正在根据数据框其余部分的某些标准制作一个新系列,对吗?这是 an example 使用pandas而不必使用 for 循环。