【问题标题】:Python: how to compute min, max, median, 1st and 3rd quartiles from a dict of lists?Python:如何从列表的字典中计算最小值、最大值、中值、第一和第三四分位数?
【发布时间】:2016-07-26 14:38:24
【问题描述】:

假设我有一个这样的列表字典:

mydict={10:[],20:[],30:[],40:[],50:[1],60:[],70:[1],80:[7, 2, 7, 2, 2, 7, 2],90:[5, 2, 2, 6, 2, 3, 1, 2, 1, 2],...}

我想计算字典中每个列表的最小值、最大值、中位数、第一和第三四分位数。我首先尝试了minmax,如下所示:

mins_mydict={k:min(v) for k,v in mydict.items()}

maxes_mydict={k:max(v) for k,v in mydict.items()}

但我收到此错误:ValueError: min() arg is an empty sequencemax 也一样。是因为我的一些列表是空的吗?

如何创建一个检查 len(list)=0 是否存在的异常?

【问题讨论】:

    标签: python dictionary max min


    【解决方案1】:

    您可以为最小值、最大值指定默认值。因此,对于空列表,您将收到通知。

    >>> min([] or [-1])
    -1
    

    你的情况

    >>> {k:min(v or [-1]) for k,v in mydict.items()}
    {70: 1, 40: -1, 10: -1, 80: 2, 50: 1, 20: -1, 90: 1, 60: -1, 30: -1}
    >>> {k:max(v or ["empty list"]) for k,v in mydict.items()}
    {70: 1, 40: 'empty list', 10: 'empty list', 80: 7, 50: 1, 20: 'empty list', 90: 6, 60: 'empty list', 30: 'empty list'}
    

    【讨论】:

      【解决方案2】:
      In [4]: mydict={10:[],20:[],30:[],40:[],50:[1],60:[],70:[1],80:[7, 2, 7, 2, 2, 7, 2],90:[5, 2, 2, 6, 2, 3, 1, 2, 1, 2]}
      
      In [5]: import pandas as pd
      
      In [6]: df = pd.DataFrame.from_dict(dict([ (k, pd.Series(v)) for k,v in mydict.items() ]))
      
      In [7]: print(df.min())
      10    NaN
      20    NaN
      30    NaN
      40    NaN
      50    1.0
      60    NaN
      70    1.0
      80    2.0
      90    1.0
      dtype: float64
      
      In [8]: df.max()
      Out[8]: 
      10    NaN
      20    NaN
      30    NaN
      40    NaN
      50    1.0
      60    NaN
      70    1.0
      80    7.0
      90    6.0
      dtype: float64
      
      In [9]: df.median()
      Out[9]: 
      10    NaN
      20    NaN
      30    NaN
      40    NaN
      50    1.0
      60    NaN
      70    1.0
      80    2.0
      90    2.0
      dtype: float64
      
      In [10]: df.quantile([.1, .3])
      Out[10]: 
           10  20  30  40   50  60   70   80   90
      0.1 NaN NaN NaN NaN  1.0 NaN  1.0  2.0  1.0
      0.3 NaN NaN NaN NaN  1.0 NaN  1.0  2.0  2.0
      

      【讨论】:

        【解决方案3】:

        除了 qmaruf 的回答,您可以通过以下方式在列表理解中使用条件:

        mins_mydict={k:min(v) if (len(v) > 0) else 0 for k,v in mydict.items()}
        

        【讨论】:

          【解决方案4】:

          你得到了错误,因为你在空列表上应用了 min 和 max 方法。

          >>> min([])
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          ValueError: min() arg is an empty sequence
          

          您的字典包含一些以空列表作为值的键。

          【讨论】:

          • 没错,这就是我的情况。必须是这样的。
          【解决方案5】:

          要快速查看数据帧的计数、平均值、最大值、最小值、标准差和四分位数,您可以使用 df.describe()

          【讨论】:

            猜你喜欢
            • 2018-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-04
            • 2021-08-25
            • 1970-01-01
            • 2015-12-03
            • 2014-09-27
            相关资源
            最近更新 更多