叫我学弟 2020-05-30 15:15 采纳率: 0%
浏览 251

Pandas中对Dataframe用不同方法对求和时,结果不同是为啥

有这样形状的一个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提取列与直接提取列的运作方式不同有关?或者是代码逻辑有问题不能这么写?求大佬解答

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-12 15:06
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料