如何用列表推导式结合方括号过滤Pandas中abc列小于4的值?
解决方案
直接给出满足要求的代码:
import pandas as pd y = pd.DataFrame({'abc': [1,2,3,4], 'def': [5,6,7,8]}) # 结合列表推导式+方括号过滤abc列小于4的值 filtered_abc = y[[x < 4 for x in y['abc']]]['abc'] print(filtered_abc)
输出结果:
0 1 1 2 2 3 Name: abc, dtype: int64
写法说明
- 列表推导式
[x < 4 for x in y['abc']]生成布尔列表[True, True, True, False],对应每一行abc列的值是否小于4 - 将这个布尔列表传入DataFrame的方括号
y[布尔列表],会过滤出所有满足条件的行 - 最后用
['abc']提取过滤后行的abc列,得到目标结果
你之前写法的问题
y['abc'] = [[y['abc']][y['abc'] = y['abc'] <4]]:存在赋值操作嵌套在索引里的语法错误,Pandas不支持这种写法y['abc'] = y['abc'] < 4:仅将abc列替换为布尔值序列,并未实现行过滤
如果只需要abc列的数值列表,也可以直接用列表推导式生成:
filtered_values = [x for x in y['abc'] if x <4] print(filtered_values) # 输出 [1,2,3]
内容的提问来源于stack exchange,提问作者Atlas
相关产品推荐
相关产品推荐

