我从具有6个自由度的传感器收集数据,现在我正尝试在其上执行一些绘图和最终的信号处理任务。
我制作了一个Pandas数据帧,并尝试根据“Stamp”列来阈值或剪辑我的数据集,这是一个以秒为单位的时间戳值。到目前为止,我已经创建了我的数据框:
headers = ["Stamp", "liny1", "linz1", "angy1", "angz1", "linx2", "liny2"]
df = pd.read_csv("Test2.csv", header=0, names = headers, delimiter = ';')
df
给了我:
我现在希望将数据阈值直到18秒标记,因为之后的所有内容都只是噪音。我尝试在熊猫中使用阈值功能,但我不确定我是否做得对。有人可以指出我的错误是什么吗?
df_thresh = df.clip(lower=None, upper=18)
答案 0 :(得分:2)
我想你想要boolean indexing
:
np.random.seed(12)
headers = ["Stamp", "liny1", "linz1", "angy1", "angz1", "linx2", "liny2"]
df = pd.DataFrame(np.random.randint(60,size=(5,7)), columns=headers)
print (df)
Stamp liny1 linz1 angy1 angz1 linx2 liny2
0 11 27 6 49 2 3 3
1 12 48 22 49 52 5 13
2 25 34 11 54 10 0 53
3 40 12 13 18 25 35 36
4 35 33 30 55 32 18 22
df1 = df[df['Stamp'] < 19]
print (df1)
Stamp liny1 linz1 angy1 angz1 linx2 liny2
0 11 27 6 49 2 3 3
1 12 48 22 49 52 5 13
或query
:
df1 = df.query("Stamp < 19")
clip
将所有高于18
的值替换为18
:
df_thresh = df.clip(lower=None, upper=18) #df.clip_upper(18)
print (df_thresh)
Stamp liny1 linz1 angy1 angz1 linx2 liny2
0 11 18 6 18 2 3 3
1 12 18 18 18 18 5 13
2 18 18 11 18 10 0 18
3 18 12 13 18 18 18 18
4 18 18 18 18 18 18 18
答案 1 :(得分:2)
听起来您希望使用loc
过滤您的数据不到19秒。
df.loc[df['Stamp'] < 19] # Not sure what units 'Stamp' is in. Seconds?
作为参考,如果您在哪里剪辑数据,这就是您正在做的事情,我认为您不想要这样做:
>>> pd.Series(range(16,21)).clip_upper(18)
0 16
1 17
2 18
3 18
4 18
dtype: int64