python - 如何通过使用熊猫施加限制来处理异常值?
问题描述
我有两个数据框,如下所示
df_data = pd.DataFrame({'temp' :[-138,36,34,38,237,339],'heart_rate':[0,0,28,31,25,238]})
df_limit = pd.DataFrame({'reading' :['min_temp','min_heart_rate'],'min_val':[30,24],'max_val':[39,32]})
我已经尝试使用处理异常值sd
,IQR
但它们似乎受到数据分布的影响,并且仍然给我数据中的异常值。
Q1 = dfx.quantile(0.25)
Q3 = dfx.quantile(0.75)
IQR = Q3 - Q1
print(IQR)
所以,我想做的是对数据强加min
andmax
条件。
这意味着,如果您查看df_limit
数据框,您将获得特定参数的min
和限制,例如or 。max
min_temp
min_heart_rate
任何违反这些条件的值都必须替换为默认值min
(如果它违反min
标准)和max
(如果它违反max
标准)值,如下所示。请注意我的真实数据有超过百万行和 70 列。任何可扩展的方法都是有帮助的。但是是的,我对数据框中的所有这些列都有限制,比如df_limit
我希望我的输出如下所示。您可以看到默认值和值violated values
被替换min
max
解决方案
DataFrame.clip
与从 中提取最小值和最大值一起使用df_limit
:
df_limit = df_limit.set_index('reading')
df_data['temp'] = df_data['temp'].clip(df_limit.loc['min_temp','min_val'],
df_limit.loc['min_temp','max_val'])
df_data['heart_rate'] = df_data['heart_rate'].clip(df_limit.loc['min_heart_rate','min_val'],
df_limit.loc['min_heart_rate','max_val'])
print (df_data)
temp heart_rate
0 30 24
1 36 24
2 34 28
3 38 31
4 39 25
5 39 32
如果可能,创建通用解决方案:
df_limit = df_limit.set_index('reading')
for c in df_data.columns:
df_data[c] = df_data[c].clip(df_limit.loc[f'min_{c}','min_val'],
df_limit.loc[f'min_{c}','max_val'])
推荐阅读
- mysql - How to fix when changing DB from SQLite3 to MySQL
- java - Swap adjacent characters of string with some conditions
- scala - Scala 中的“副作用”是什么?
- java - Generate exe for 32-bit system of Java software
- rxjs - 从不可预测的源 Observable 构建“心跳”Observable
- rest - 如何在 Katalon Studio Rest API 中将变量值传递给 json Path
- javascript - How to prevent infinite re-rendering with useEffect() in React
- ios - 在 SwiftUI 中为视图设置动画以在点击时向上滑动和隐藏
- c - 寻找完美数的程序:输出错误。完美数是因数之和等于给定数的数
- android - How Adding Real time data and give min and max angle to Slice Pie chart