Dan*_*ana 1 python dictionary loops pandas
在 R 中使用了很长时间后,我正在转换回 Python,我不记得存储多个参与者的时间序列的最佳方法。一些搜索建议的字典很好,但是当我遍历字典时,我收到了几次以下警告:
indexing.py:1069: FutureWarning: Value based partial slicing on non-monotonic DatetimeIndexes with non-existing keys is deprecated and will raise a KeyError in a future Version. return self._getitem_tuple_same_dim(tup)
我应该以不同的方式做什么?非常感谢!
df_motion =
| 约会时间 | X | 是 | z |
|---|---|---|---|
| 2020-07-10 13:49:11.429 | 0.213234 | -0.069581 | -10.066122 |
| 2020-07-10 13:49:11.440 | 0.219219 | -0.047585 | -10.085126 |
| 2020-07-10 13:49:11.450 | 0.319219 | -0.057585 | -10.185357 |
df_motion_dict[1] = df_motion # and other pandas dataframes of motion signals where the keys are a list with missing numbers, for example 1,3,4,10.
audience = {}
for k,v in df_motion_dict.items():
df_motion = df_motion_dict[k]
df_motion = df_motion.loc['2020-07-10 13:55' : '2020-07-10 14:25.5', :]
if len(df_motion)>0: # remove any dataframes not containing data
audience[k]=df_motion
Run Code Online (Sandbox Code Playgroud)
我看到您已经解决了这个问题,但我想向后代澄清,此警告的根本原因是时间序列索引中的间距不一致,同时使用索引中不存在的键进行切片。主要补救措施有两种:
df_motion.resample()并重新采样到适当的频率(在本例中可能是 10 毫秒),提供某种聚合函数,然后根据需要填充空白,具体取决于频率和数据本身的变化。这将解决non-monotonic错误的“”方面,并允许您继续使用索引中不存在的键进行切片。df_motion = df_motion.resample(freq='10ms').mean()df_motion.loc['2020-07-10 13:49:11.429':'2020-07-10 13:49:11.450']. loc这将与处理非时间序列数据帧时通常的工作方式相同,并且不会引发此错误。顺便说一句,您还在 for 循环中创建了一个重复的变量。当您迭代字典的项目并将它们临时分配给 时k, v,k将一一保存每个键,并将v保存每个关联的值。因此,在 for 循环内部,您可以使用v而不是创建df_motion变量:
audience = {}
for k,v in df_motion_dict.items():
v = v.loc['2020-07-10 13:55' : '2020-07-10 14:25.5', :]
if len(v)>0: # remove any dataframes not containing data
audience[k]=v
Run Code Online (Sandbox Code Playgroud)
或者更简洁地说:
audience = {
k: v.loc['2020-07-10 13:55':'2020-07-10 14:25.5']
for k, v in df_motion_dict.items()
if not v.empty
}
Run Code Online (Sandbox Code Playgroud)
我在这里遇到了同样的问题。我搜索了 Pandas 文档,但找不到替代方法或任何关于它为什么会被弃用的解释。无论如何,我可以通过在查询前对索引进行排序来消除警告。
尝试这个:
df_motion = df_motion.sort_index().loc['2020-07-10 13:55' : '2020-07-10 14:25.5', :]
Run Code Online (Sandbox Code Playgroud)
我希望这也适用于你。