编写函数基于字典过滤Pandas DataFrame时返回None的问题排查
问题原因及解决方法
你遇到的问题很典型——函数里没写return语句,Python函数如果没有显式返回结果,默认会返回None。
修复后的函数写法
直接给你的原逻辑加上return就行:
import pandas as pd import numpy as np df = pd.DataFrame({'color':['red', 'green', 'blue'], 'brand':['Ford','fiat', 'opel'], 'year':[2016,2016,2017]}) d = {'color':'red', 'year':2016} def filter_dataframe(df, filter_dict): # 加上return返回过滤后的结果 return df.loc[np.all(df[list(filter_dict)] == pd.Series(filter_dict), axis=1)] # 调用测试 filtered_df = filter_dataframe(df, d) print(filtered_df)
更简洁的替代写法
除了你的原逻辑,还有两种更直观的写法可以参考:
- 逐列构建过滤条件
def filter_dataframe(df, filter_dict): # 初始化全True的掩码 mask = pd.Series([True]*len(df)) # 遍历字典,逐步缩小过滤范围 for col, value in filter_dict.items(): mask &= df[col] == value return df[mask]
- 使用
df.query构建查询语句
def filter_dataframe(df, filter_dict): # 把字典转成query支持的字符串格式 query_str = ' & '.join([f"{col} == {repr(val)}" for col, val in filter_dict.items()]) return df.query(query_str)
内容的提问来源于stack exchange,提问作者Artursh
相关产品推荐
相关产品推荐

