【发布时间】:2020-12-09 13:57:27
【问题描述】:
我有一个 Pandas DataFrame,它有两列包含 [-pi, pi) 范围内的一些角度。我需要计算每行的瞬时角速度,我可以使用 diff() 来完成,但是当我的数据跨越从 pi 到 -pi 的不连续性时,这种天真的方法会失败,例如
我试图在我的列上使用 numpy.unwrap(),但是当我尝试下面的代码时,我得到一个 ValueError。
angle_data["theta"].apply(np.unwrap)
<Traceback message>
ValueError: diff requires input that is at least one dimensional
如果我将列复制到 Pandas 系列并尝试使用 apply(np.unwrap),也会发生这种情况。
我可以通过这样做来解决这个问题
angle_data["theta"] = pd.Series(np.unwrap(angle_data["theta"]))
或者一次对多个列使用 apply,但我想知道为什么 apply(np.unwrap) 方法不适用于 Pandas 系列。
【问题讨论】:
-
不使用 diff,也许你可以像here 那样使用 np.arctan2(cos 和 sin 都存在于 numpy 中)
-
谢谢,我以前没见过这种方法,可能会试一试,尽管从该答案的后续 cmets 来看,与其他解决方法相比,它可能对性能造成太大影响我找到了。
-
不要太担心性能。我一直在使用它来解决大数据集上的类似问题(实际上是“平均”角度),这不是问题(afaik,因为它直接来自 numpy,它已经比大多数 python 指令快......)