基于条件修改DataFrame的Census列?解决np.where报错问题
解决方法
错误原因
你误用了np.where的调用方式:np.where是函数,必须用圆括号()传递参数,而你用了方括号[](仅用于数组/序列的下标访问),因此触发TypeError: 'function' object is not subscriptable。
正确实现方式
以下两种方法都适合数百万行的大数据量(均为矢量化操作,效率远高于循环):
方法1:修正np.where的调用
import pandas as pd import numpy as np # 正确构建示例DataFrame Population = [34,2,1,4542,422,122,55,7876,45,23,1,3] Census = [12,43,14,6545,63,123,654,33,123,12,99,88] a = pd.DataFrame({'Population': Population, 'Census': Census}) # 用圆括号调用np.where,完成条件赋值 a['Census'] = np.where(a['Population'] < a['Census'], a['Population'], 1)
方法2:用pandas.loc直接定位修改
这种方式逻辑更直观,分两步完成赋值:
# 第一步:将满足条件的行的Census列替换为Population a.loc[a['Population'] < a['Census'], 'Census'] = a['Population'] # 第二步:将不满足条件的行的Census列设为1 a.loc[a['Population'] >= a['Census'], 'Census'] = 1
内容的提问来源于stack exchange,提问作者DatBigD
相关产品推荐
相关产品推荐

