Pandas多列数据处理:计算各街区True列表占比的方法
解决Pandas计算街区True值占比的问题
嘿,我来帮你搞定这个问题!你碰到的AttributeError: 'Series' object has no attribute 'True',原因很直接:True和False是Python的保留关键字,不能用.True/.False这种属性访问的方式来获取DataFrame的列。Pandas的属性访问只支持符合Python标识符规则的列名(比如不能是关键字、不能带空格),所以得改用方括号[]来访问这些列。
另外,你的示例数据里有个小bug:{ 'neighbourhood': 'Bromley', False: Bromley, True: 0 }这一行的False值写了Bromley(应该是数字,我下面假设是1890,你可以换成实际数值)。
下面是完整的修正方案:
1. 先修正并构造正确的DataFrame
import pandas as pd data = [ { 'neighbourhood': 'Barking and Dagenham', False: 795, True: 0 }, { 'neighbourhood': 'Barnet', False: 6451, True: 0 }, { 'neighbourhood': 'Bexley', False: 704, True: 0 }, { 'neighbourhood': 'Brent', False: 13681, True: 576 }, { 'neighbourhood': 'Bromley', False: 1890, True: 0 } # 修正此处的数值错误 ] df = pd.DataFrame(data)
2. 计算True值占比的正确代码
用方括号访问列,先计算总数量,再算占比(注意处理总数量为0的情况,避免除以0报错):
# 计算每个街区的总列表数 df['total'] = df[True] + df[False] # 计算True值的占比,并用fillna(0)处理总数量为0的情况 df['percent_true'] = (df[True] / df['total']) * 100 df['percent_true'] = df['percent_true'].fillna(0)
3. 更简洁的写法(省略total列)
如果你不需要保留total列,可以直接一行完成计算,还能顺便保留两位小数让结果更美观:
df['percent_true'] = (df[True] / (df[True] + df[False])) * 100 df['percent_true'] = df['percent_true'].fillna(0).round(2)
运行后,你就能得到每个街区的True值占比了。比如Brent街区的占比大概是4.05%,其他街区因为True值为0,占比就是0。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

