从Excel'numpy.float64'对象是不可迭代的

时间:2019-06-13 16:34:58

标签: python-3.x

我想要一本以销售代理为键,净销售额为价值的字典。我不知道为什么这行不通。

NetSalesPerAgent_2015 = {}
for agent in pd.read_excel('VerkoopBrouwerij.xlsx',sheet_name='2015')['Agent Name']:
    if agent not in NetSalesPerAgent_2015:
        NetSalesPerAgent_2015[agent] = sum(list(pd.read_excel('VerkoopBrouwerij.xlsx', sheet_name='2015', index_col='Agent Name').loc[agent]['Net Sales']))

1 个答案:

答案 0 :(得分:0)

首先,检查Excel工作表的“净销售额” 列中的值是否存在异常。

然后,一种避免Floating Point Arithmetic: Issues and Limitations陷阱的简单方法是将输入值乘以100、1000或10,000以除去小数,将它们传递给函数,然后将输出值除以相同的数字。

使用熊猫read_excel()将Excel工作表读入数据框:

import pandas as pd

df = pd.read_excel('VerkoopBrouwerij.xlsx', sheet_name='2015')

使用mul()乘以“净销售额” 值以除去小数点(例如10,000表示4个小数位):

df['Net Sales'] = df['Net Sales'].mul(10000)

使用groupby()sum()创建每个'代理商名称' 的一系列'净销售额'

>
ser = df.groupby('Agent Name')['Net Sales'].sum()

使用div()划分序列并取回小数:

ser = ser.div(10000)

使用to_dict()将系列转换为字典:

NetSalesPerAgent_2015 = ser.to_dict()

使用的测试工作表:

代理商名称|净销售额
A | 10.5005
B | 20.6006
C | 30.7007
D | 40.8008
D | 10.5005
B | 20.6006
A | 30.7007
C | 40.8008

结果:

{'A': 41.2012, 'B': 41.2012, 'C': 71.5015, 'D': 51.3013}