python - Pandas 将函数应用于列表中的多个列
问题描述
我正在尝试创建一个函数,该函数创建一个修改后的数据框,其中所有异常值都从我的变量 num_vars 中存储的列中删除。到目前为止,这是我的功能:
def remove_outliers(column):
Q1 = np.percentile(df[column], 25, interpolation = 'midpoint')
Q3 = np.percentile(df[column], 75, interpolation = 'midpoint')
IQR = Q3 - Q1
IQR_mult = IQR * 1.5
ceiling = Q3 + IQR_mult
floor = Q1 - IQR_mult
return df[(df[column] <= ceiling) & (df[column] >= floor)]
我要应用此功能的列存储在
num_vars = ['host_response_rate', 'accommodates', 'bedrooms', 'beds', 'minimum_nights', 'availability_30', 'number_of_reviews', 'review_scores_rating', 'review_scores_cleanliness', 'review_scores_checkin', 'review_scores_communication', 'review_scores_location', 'review_scores_value', 'time_from_last_review', 'num_amenities', 'price']
该函数仅在调用诸如“价格”之类的一列时起作用,但在一次调用多个项目时不返回干净的数据框。我怎样才能做到这一点,以便该函数可以一次获取所有这些列,并返回一个已删除所有异常值的数据框?
解决方案
您可以更改您的 remove_outlier 函数以接受行和列参数,然后使用应用于行的函数遍历列,如下所示:
def remove_outliers(row,column):
Q1 = np.percentile(df[column], 25, interpolation = 'midpoint')
Q3 = np.percentile(df[column], 75, interpolation = 'midpoint')
IQR = Q3 - Q1
IQR_mult = IQR * 1.5
ceiling = Q3 + IQR_mult
floor = Q1 - IQR_mult
if float(ceiling)>= row[column] >= int(floor):
return row[column]
else:
return None
num_vars = ['host_response_rate', 'accommodates', 'bedrooms', 'beds', 'minimum_nights', 'availability_30',
'number_of_reviews', 'review_scores_rating', 'review_scores_cleanliness', 'review_scores_checkin',
'review_scores_communication', 'review_scores_location', 'review_scores_value', 'time_from_last_review',
'num_amenities', 'price']
for col in num_vars[:3]:
df[col] = df.apply(lambda row: remove_outliers(row,col), axis=1)
df = df.dropna().reset_index(drop=True)
推荐阅读
- reactjs - 尝试在 React 中使用 onClick 更新 url 参数
- google-chrome - TravisCI - Google Chrome 稳定版无法通过身份验证
- sql-server - 唯一索引/约束以及 NOT NULL 关键字在技术上与主键相同吗?
- typescript - react-hook-form 和 typescript - 类型DetailedHTMLProps上不存在属性'inputRef'
- ios - 如何使用带有 WatchOS SwiftUI 建议的 TextField
- web-services - 为什么 Web 服务测试不起作用?浏览器不断要求登录
- python - nosetests - 如何检测子目录中的测试?
- ios - 我的 iOS 应用程序在 AppStore 中,但它没有出现在上面
- python - Python 打印到 PDF
- apache-spark - Databricks 环境中的 SparkSessionExtensions injectFunction