我正在尝试对 Pandas 数据帧中的所有数据进行时间插值。当前数据的时间增量为 0.04 秒。我想将其增量设为 0.01 秒以匹配另一个数据集。我意识到我可以使用 DataFrame.interpolate() 函数来实现这一点。然而,我卡在了如何以高效的方式在数据帧的每一行之间插入 3 行 NaN 值。
import pandas as pd
import numpy as np
df = pd.DataFrame(data={"Time": [0.0, 0.04, 0.08, 0.12],
"Pulse": [76, 74, 77, 80],
"O2":[99, 100, 99, 98]})
df_ins = pd.DataFrame(data={"Time": [np.nan, np.nan, np.nan],
"Pulse": [np.nan, np.nan, np.nan],
"O2":[np.nan, np.nan, np.nan]})
我希望将df从这个样子转换为:
Time Pulse O2
0 0.00 76 99
1 0.04 74 100
2 0.08 77 99
3 0.12 80 98
转换成类似下面的形式:
Time Pulse O2
0 0.00 76 99
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 0.04 74 100
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 0.08 77 99
9 NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN
12 0.12 80 98
我可以随后调用
df = df.interpolate()
这将产生类似于以下内容(这里我举个例子):
Time Pulse O2
0 0.00 76 99
1 0.01 76 99
2 0.02 75 99
3 0.03 74 100
4 0.04 74 100
5 0.05 75 100
6 0.06 76 99
7 0.07 77 99
8 0.08 77 99
9 0.09 77 99
10 0.10 78 98
11 0.11 79 98
12 0.12 80 98
我尝试使用iterrows技术,在每一行后插入df_ins帧。但是在迭代过程中,我的索引被打乱了。我还尝试过对df进行切片并将df切片和df_ins进行连接,但是循环又一次打乱了索引。
有没有人有关于如何高效地完成这个任务的建议?
df = df.set_index(df.index.total_seconds())
将时间索引转换回浮点数。这可能不是最合乎逻辑的,但对于我的另一半编码界面来说,它需要一个浮点数而不是日期时间。 - chris-ulmy