【发布时间】:2021-12-18 12:37:58
【问题描述】:
我做了一个代码,目的是合并两个数据框()。但是,其中一个数据帧包含由于某种原因每隔一秒记录 10 赫兹数据和每隔 11 赫兹的数据。为了避免合并问题,我对此问题的解决方案是创建一个如下所示的for loop:
for myrow in range (len(wholedf)):
print(myrow)
sepe = wholedf.at[myrow,'TIME_DIFFERENCE']
if sepe != 0.0:
resetcounter = 1
row0 = myrow
if resetcounter > 11:
wholedf = wholedf.drop(wholedf.index[row0])
myrow+=1
resetcounter+=1
(我相信你们中的许多人都了解它的功能。但是对于那些不了解的人,变量“sepe”返回时差单元格的值(0.0 或大于 0.0)。每次它记录没有差异的行 (0.0) 在 11 的跨度内出现在彼此之后,它删除了这些 row0
使用此代码的问题在于它非常慢而且它返回一个意外错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
对于if sepe > 0.0:这一行
我的两个数据框是这样的:
1.
TIME SPEED OTHER OTHER2
...
2020-12-03 22:06:16 50 100 52
2020-12-03 22:06:17 60 130 22
2020-12-03 22:06:17 100 105 13
2020-12-03 22:06:17 24 99 104
2020-12-03 22:06:17 44 24 22
2020-12-03 22:06:17 66 20 257
2020-12-03 22:06:17 110 95 102
2020-12-03 22:06:17 90 22 24
2020-12-03 22:06:17 10 64 51
2020-12-03 22:06:17 11 66 61
2020-12-03 22:06:17 100 100 103
2020-12-03 22:06:17 120 175 111
2020-12-03 22:06:18 60 130 22
2020-12-03 22:06:18 100 105 13
2020-12-03 22:06:18 24 99 104
2020-12-03 22:06:18 44 24 22
2020-12-03 22:06:18 66 20 257
2020-12-03 22:06:18 110 95 102
2020-12-03 22:06:18 90 22 24
2020-12-03 22:06:18 10 64 51
2020-12-03 22:06:18 11 66 61
2020-12-03 22:06:18 100 100 103
...
(如您所见,第 17 秒的行的长度是 11 而不是 10)
2.
TIME FUEL OTHER OTHER2
...
2020-12-03 22:06:16.944 124 49 157
2020-12-03 22:06:17.044 113 42 132
2020-12-03 22:06:17.144 144 11 111
2020-12-03 22:06:17.244 224 29 557
2020-12-03 22:06:17.344 1224 422 151
2020-12-03 22:06:17.444 324 56 257
2020-12-03 22:06:17.544 18 29 157
2020-12-03 22:06:17.644 144 99 182
2020-12-03 22:06:17.744 672 14 977
2020-12-03 22:06:17.844 655 13 87
2020-12-03 22:06:17.944 194 15 14
...
(数据以10hz记录)
对于这个问题还有其他更聪明的解决方案吗?或者如果这是唯一的解决方案,我该如何修复错误?
提前谢谢你!
【问题讨论】:
-
我想一个简单的解决方案是删除每个索引为 21*x 的 cel,但这不支持不规则性。
标签: python pandas dataframe for-loop