【问题标题】:Extract Series from Series of Dictionaries从字典系列中提取系列
【发布时间】:2017-03-13 16:05:33
【问题描述】:

我有一个带有日期索引和字典值的 Pandas Series 对象,如下所示:

timeSeries = pd.Series({'2014-05-01': {'property1': 1, 'property2': 2},
                        '2014-05-02': {'property1': 3, 'property2': 4}})

我知道每个 dict 都包含相同的键(property1property2)。有没有办法以property1 作为值来获得没有循环的系列。

即我要:

 propertySeries = pd.Series({'2014-05-01': 1,
                             '2014-05-02': 3})

【问题讨论】:

    标签: python performance pandas dictionary series


    【解决方案1】:

    您可以通过valuesSeries 转换为numpy array,然后使用DataFrame 构造函数:

    print (timeSeries.values.tolist())
    [{'property1': 1, 'property2': 2}, {'property1': 3, 'property2': 4}]
    
    df = pd.DataFrame(timeSeries.values.tolist(), index=timeSeries.index)
    print (df)
                property1  property2
    2014-05-01          1          2
    2014-05-02          3          4
    
    print (df['property1'])
    2014-05-01    1
    2014-05-02    3
    Name: property1, dtype: int64
    
    print (df['property2'])
    2014-05-01    2
    2014-05-02    4
    Name: property2, dtype: int64
    

    另一个较慢的解决方案:

    print (timeSeries.apply(lambda x: x['property1'])) 
    2014-05-01    1
    2014-05-02    3
    dtype: int64
    
    print (timeSeries.apply(lambda x: x['property2'])) 
    2014-05-01    2
    2014-05-02    4
    dtype: int64
    

    如果您自己创建了时间序列,请使用 DataFrame.from_dict:

    timeSeries = pd.DataFrame.from_dict({'2014-05-01': {'property1': 1, 'property2': 2},
                                         '2014-05-02': {'property1': 3, 'property2': 4}}, 
                                          orient='index')
    
    
    print (timeSeries) 
                property1  property2
    2014-05-01          1          2
    2014-05-02          3          4
    

    【讨论】:

      【解决方案2】:

      如果您自己创建了时间序列,则可以改为创建 DataFrame:

      timeSeries = pd.DataFrame({'2014-05-01': {'property1': 1, 'property2': 2},
                                 '2014-05-02': {'property1': 3, 'property2': 4}}).T
      timeSeries['property1']
      # 2014-05-01    1
      # 2014-05-02    3
      # Name: property1, dtype: int64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 2023-01-24
        • 2016-10-22
        相关资源
        最近更新 更多