我有一个熊猫数据框,其中缺少一些行,我可以通过评估数据框的最后一列cycle
来判断。该列应遵循一个从0-127重复并直到数据帧结束的循环。我可以说,例如,如果此列上的值从36跳到38,则表示缺少行,这意味着缺少第37行。这是一个例子:
df = pd.read_csv('Acc12019-08-08T21_52_46.3175552+01_00.csv')
Command RegisterAddress Timestamp accx ... magx magy magz cycle
27 3 34 115.0948 -83 ... 79.0 80.0 -78.0 35.0
28 3 34 115.1004 -34 ... 79.0 80.0 -78.0 36.0
29 3 34 115.1048 36 ... 79.0 80.0 -80.0 38.0
... ... ... ... ... ... ... ... ...
3731 3 34 140.0191 1238 ... 44.0 -90.0 -39.0 30.0
3732 3 34 140.0235 1243 ... 44.0 -90.0 -38.0 31.0
3733 3 34 140.0293 1368 ... 43.0 -90.0 -35.0 33.0
我想做的是在不满足此条件的情况下添加NaN行,例如,如果cycle
中缺少37个,则添加NaN行,如下所示:
27 3 34 115.0948 -83 ... 79.0 80.0 -78.0 35.0
28 3 34 115.1004 -34 ... 79.0 80.0 -78.0 36.0
NaN NaN NaN NaN NaN NaN NaN 37.0
29 3 34 115.1048 36 ... 79.0 80.0 -80.0 38.0
缺少的行是随机的,并且可能发生在任何cycle
位置,因此我认为第一件事就是检查不满足0-127 cycle
条件的地方-这就是我很难做。
我试图寻找在列表like this上查找缺失数字的方法,但到目前为止,在我的数据帧上实现它没有成功。
某些帮助或指导将不胜感激!
答案 0 :(得分:1)
一种方法是使用set
查找丢失的行;
append
,sort_values
和reset_index
,将它们添加到原始数据框中。
# assume `lst` is a list containing all possible `cycle` values
lst = [35, 36, 37, 38, 39, 40]
missing = pd.DataFrame({'cycle': list(set(df['cycle']) ^ set(lst))})
# missing.head()
cycle
0 37
1 39
2 40
df.append(missing).sort_values(['cycle']).reset_index(drop=True)
输出:
发布了图片,因为to_clipboard()
的输出都被弄乱了。