【问题标题】:Is there a better way of finding summary statistics in Python?有没有更好的方法在 Python 中查找汇总统计信息?
【发布时间】:2020-03-28 09:54:16
【问题描述】:

以下是我查找 5 点汇总统计的代码。我不断收到此错误:

列表索引必须是整数或切片,而不是 str

看来我使用我创建的描述函数的方式是错误的。

from statistics import stdev,median,mean

def describe(key):
    a=[]
    for i in scripts:
        a.append(i[key])
    a=scripts[key]
    total = sum(script[key] for script in scripts)
    avg = total/len(a)
    avg=mean(a)
    s = stdev(a)
    q25 = min(a)+(max(a)-min(a))*25
    med = min(a)+(max(a)-min(a))*50
    med=median(a)
    q75 = min(a)+(max(a)-min(a))*75
    return (total, avg, s, q25, med, q75)`enter code here`
summary = [('items', describe('items')),
           ('quantity', describe('quantity')),
           ('nic', describe('nic')),
           ('act_cost', describe('act_cost'))]

我不断收到此错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-8-ba78d5218ead> in <module>()
----> 1 summary = [('items', describe('items')),
      2            ('quantity', describe('quantity')),
      3            ('nic', describe('nic')),
      4            ('act_cost', describe('act_cost'))]

<ipython-input-1-bcf37f98eb7d> in describe(key)
      4     for i in scripts:
      5         a.append(i[key])
----> 6     a=scripts[key]
      7     total = sum(script[key] for script in scripts)
      8     avg = total/len(a)

TypeError: list indices must be integers or slices, not str

【问题讨论】:

    标签: dataframe statistics dataset data-science python-3.7


    【解决方案1】:

    很难理解您的问题,因为我们不知道scripts 的样子。它是一个未在您的脚本中定义的全局变量。该错误指出scripts 的类型为list,但看起来您认为它是代码中的dataframe。所以请检查scripts的类型。

    另外,您是否知道有一种简单的方法可以使用 numpy 计算五位数摘要,如下所示:

    import numpy as np
    minimum, q25, med, q75, maximum = np.percentile(a, [0, 25, 50, 75, 100], interpolation='midpoint')
    

    有关说明,请参阅: https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html

    【讨论】:

      【解决方案2】:

      根据您的问题,您正在访问字典列表。 直接使用它的键值访问这里不会产生结果。

      所以你必须这样做, getValues = lambda key,inputData: [subVal[key] for subVal in inputData if key in subVal]

      在这种情况下, getValues('key', scripts) 将给出相应的列表,然后很容易计算该列表的统计信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 2012-01-07
        • 2016-01-28
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多