有这样形状的一个Dataframe:
[365 rows x 90 columns]
该Dataframe中所有列的类型均为float64,每个数据形如3167.794675。其中小数位数n多位。
欲对各列分别求和。现需查验第46列的和数据
尝试4种代码,输出均不同。
# 第一种:全部求和后提取第46列数据
print(self.angle_detail.sum()[46])
输出值为:1599133.8637126954
# 第二种:全部求和后提取第46列的sum行数据
self.angle_detail.loc['sum'] = self.angle_detail.iloc[1: 365, :].sum(axis=0)
print(self.angle_detail.loc['sum', 46])
输出值为:1595744.3653847636
# 第三种: 全部求和后提取第46列数据
for i, j in self.angle_detail.items():
self.angle_detail.loc['sum', i] = j.iloc[1:365].sum()
if i == 46:
print(self.angle_detail.loc['sum', 46])
输出值为:1595744.3653847626,该值与第二种表达式输出值相同
# 第四种: 直接求第46列数据
print(self.angle_detail.iloc[1:365, 46].sum(axis=0))
输出值为:1595631.249335795
后经过提取数据,将第46列数据转换为列表后,利用sum方法对该列表求和:
l = list(self.angle_detail[46])
print(sum(l))
输出值为:1599133.8637126954
该值与第一种方法吻合,故第一种方法求值为准确的。
问:
后三种方法,错在哪呢?
是否跟float无法精确有关?或者是跟loc提取列与直接提取列的运作方式不同有关?或者是代码逻辑有问题不能这么写?求大佬解答