AttributeError报错:'float'对象无'tail'属性,DataFrame新列计算问题
问题解决:DataFrame生成新列时的AttributeError错误
错误原因
- 用
df.apply(axis=1)时,lambda里的x是DataFrame的单行数据,x['D']是单个浮点数,根本没有tail()方法,这就是报错的直接原因。 - 你要计算的是D列全局最后7个值的均值,这个值不需要逐行重复计算,原来的代码完全搞错了计算对象。
正确解决方案
先单独算出D列最后7个值的均值,再用列运算生成S列(比apply高效得多):
方法1:条件判断写法
import numpy as np import pandas as pd # 计算D列最后7个值的均值 d_last7_mean = df['D'].tail(7).mean() # 生成新列S,处理除以0的情况 if d_last7_mean == 0: df['S'] = np.inf else: df['S'] = (df['E'] + df['I'] - df['D']) / d_last7_mean
方法2:用np.where简化
import numpy as np import pandas as pd d_last7_mean = df['D'].tail(7).mean() df['S'] = np.where(d_last7_mean == 0, np.inf, (df['E'] + df['I'] - df['D']) / d_last7_mean)
补充说明
- 别用
apply(axis=1)做这种全局计算的列生成,pandas的列向量运算速度比逐行apply快几十倍,逻辑也更清晰。 - 你担心的inf值,这里通过判断均值是否为0直接设置,完全可以解决。
内容的提问来源于stack exchange,提问作者Triz
相关产品推荐
相关产品推荐

