如何在pandas中计算两列间的百分比变化并解决相关TypeError报错
报错原因排查
你给出的列类型显示2020、2021两列本身都是int64数值类型,不存在类型问题,报错大概率是列调用方式错误导致:
- 你的列名是字符串类型的
'2021'、'2020',如果调用时不加引号写为UKnewcars[2021],会被识别为按整数索引取值,无法匹配到正确的数值列 - 数字开头的列名不能用
UKnewcars.2021这种属性调用方式,不符合Python标识符命名规则,会触发语法错误 - 误将字符串类型的
Model列加入数值运算,也会触发int和str的运算报错
正确计算两列百分比变化的两种方法
百分比变化的计算逻辑为:(本期值 - 基期值)/基期值 * 100%,你要计算2021年相对2020年的变化,可选用下面任意一种方式:
方法1:手动公式计算(可读性更高)
# 计算百分比变化,单位为%,保留2位小数 UKnewcars['2021_vs_2020_pct'] = ((UKnewcars['2021'] - UKnewcars['2020']) / UKnewcars['2020'] * 100).round(2) # 如果需要显示为带百分号的字符串格式,可追加下面的代码 UKnewcars['2021_vs_2020_pct'] = UKnewcars['2021_vs_2020_pct'].astype(str) + '%'
方法2:使用pct_change函数(适配多列批量计算场景)
pct_change可以通过指定axis=1实现列之间的百分比变化计算,注意调整列顺序保证基期在前、本期在后:
# 按列方向计算百分比变化,直接取2021列的结果即可 UKnewcars['2021_vs_2020_pct'] = (UKnewcars[['2020', '2021']].pct_change(axis=1)['2021'] * 100).round(2)
内容的提问来源于stack exchange,提问作者BlueRhino254
相关产品推荐
相关产品推荐

