按列对大熊猫数据进行阈值处理

时间:2017-09-10 16:48:10

标签: python pandas matplotlib

我从具有6个自由度的传感器收集数据,现在我正尝试在其上执行一些绘图和最终的信号处理任务。

我制作了一个Pandas数据帧,并尝试根据“Stamp”列来阈值或剪辑我的数据集,这是一个以秒为单位的时间戳值。到目前为止,我已经创建了我的数据框:

headers = ["Stamp", "liny1", "linz1", "angy1", "angz1", "linx2", "liny2"]
df = pd.read_csv("Test2.csv", header=0, names = headers, delimiter = ';')
df

给了我:

head of dataframe

我现在希望将数据阈值直到18秒标记,因为之后的所有内容都只是噪音。我尝试在熊猫中使用阈值功能,但我不确定我是否做得对。有人可以指出我的错误是什么吗?

df_thresh = df.clip(lower=None, upper=18)

2 个答案:

答案 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