Pandas的loc方法传入什么对象可选中DataFrame所有行,避免代码重复?
你要的MysteryObject真实存在,它就是Python内置的slice(None),和.loc语法中用来取全量行的:完全等价,是:语法糖对应的可赋值传递的实体对象。
优化后符合你理想写法的代码如下:
import pandas as pd from typing import Union, Optional def get_predictions(df: pd.DataFrame, subset: Optional[Union[str, slice]] = slice(None)) -> pd.DataFrame: # 注意:多级列选择需要用元组包裹,否则会被识别为行索引筛选逻辑,容易触发报错 return df[('properties', 'prediction')].loc[subset]
如果你习惯保留默认值为None的参数设计,也可以用条件表达式实现无重复代码:
def get_predictions(df: pd.DataFrame, subset: Optional[str] = None) -> pd.DataFrame: return df[('properties', 'prediction')].loc[subset if subset is not None else slice(None)]
补充说明:
- 除了
slice(None),你也可以传入df.index作为全量行选择的参数,效果一致,二者性能差异可以忽略。 - 原有代码中
df['properties', 'prediction']的写法不符合多级列选择规范,需要改为用元组包裹的df[('properties', 'prediction')]避免报错。
内容的提问来源于stack exchange,提问作者dda2120
相关产品推荐
相关产品推荐

