python - isinstance 替代覆盖默认值
问题描述
我的问题是关于isinstance
函数的,但我会举一个例子:
我正在尝试在 pandas 中实现 min-max 标准化,特别是我需要能够设置任意最大值和最小值。
以下代码似乎有效:
def normalize_parameter(
array,
fill_na=True,
min_bound=True,
max_bound=True,
feature_range=(0, 1),
reverse=False
):
""" Min-max normalization.
Parameters
----------
array : pd.Series
column to normalize
fill_na : bool
NaN policy: fillna with 0 (True) or not (False)
min_bound, max_bound : bool
min and max values, default (min, max values of an array)
feature_range : tuple (min, max), default=(0, 1)
scale of normalization
reverse : bool, default=False
"""
s = array.fillna(0) if fill_na else array
if isinstance(min_bound, bool):
min_bound = s.min()
if isinstance(max_bound, bool):
max_bound = s.max()
print(f"{feature_range=}; bounds: {min_bound=}, {max_bound=}; nan policy: {fill_na=}")
_min, _max = feature_range
min_max_normalization = _min + ((s - min_bound) * (_max - _min) / (max_bound - min_bound))
return 1 - min_max_normalization if reverse else min_max_normalization
# takes min and max values of an array
normalize_parameter(array)
# takes min value of an array and max value of 1
normalize_parameter(array, max_bound=1)
但我觉得这部分特别可以改变并且更加pythonic。
if isinstance(min_bound, bool):
min_bound = s.min()
我认为这会起作用:
min_bound = min_bound or s.min()
但它不是 if min_bound = 0
as 0 == False
。
你认为有更好的方法还是我应该坚持isinstance
?
解决方案
推荐阅读
- terraform - azurerm_app_service v2 如何为 v2 启用身份验证设置
- javascript - 为什么iframe源代码比文件源代码?
- azure-resource-manager - 如何使用 Bicep 引用其他订阅中的资源?
- c# - WinUI 3 中的 Shell_NotifyIcon
- regex - 上一次重复期间的正则表达式模式不同的行为
- python - 在 Pandas 中返回列和组时制作 SQL 案例
- python - 用python读取Excel文件
- merge - 在 SNOWFLAKE 中进行横向展平时重复主键
- angular - 角度嵌套导航和路由器插座
- python - 在 Replit 中保存游戏并加载以从保存的位置开始