【问题标题】:python key value list to panda seriespython键值列表到熊猫系列
【发布时间】:2014-06-16 20:53:10
【问题描述】:

我在 python 中有以下时间序列列表:

list = [(datetime.datetime(2008, 7, 15, 15, 0), 0.134),
    (datetime.datetime(2008, 7, 15, 16, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 17, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 18, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 19, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 20, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 21, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 22, 0), 0.0),
    (datetime.datetime(2008, 7, 15, 23, 0), 0.0),
    (datetime.datetime(2008, 7, 16, 0, 0), 0.0)]

此列表是一个键值对,其中键是日期时间,值是后面的一个,以逗号分隔。我想从键(日期时间)和值(十进制值)创建熊猫系列。任何人都可以帮我将上面的时间序列值列表拆分为两个列表(list1 和 list2),这样我就可以创建 pandas Series 对象,以便从以下代码中进行进一步分析?

import pandas as pd
ts = pd.Series(list1, list2)

【问题讨论】:

  • 所以你想将元组列表分成 2 个列表,一个键和一个值?
  • 在覆盖内置函数时不要调用对象list

标签: python numpy pandas time-series data-analysis


【解决方案1】:

试试

d = {}

for i in my_list:
    d[i[0]] = i[1]

s = pd.series (d)

【讨论】:

    【解决方案2】:
    In [34]: pd.Series(*zip(*((b,a) for a,b in data)))
    Out[34]: 
    2008-07-15 15:00:00    0.134
    2008-07-15 16:00:00    0.000
    2008-07-15 17:00:00    0.000
    2008-07-15 18:00:00    0.000
    2008-07-15 19:00:00    0.000
    2008-07-15 20:00:00    0.000
    2008-07-15 21:00:00    0.000
    2008-07-15 22:00:00    0.000
    2008-07-15 23:00:00    0.000
    2008-07-16 00:00:00    0.000
    dtype: float64
    

    或者,避免制作单线的疯狂愿望:

    dates, vals = zip(*data)
    s = pd.Series(vals, index=dates)
    

    如果数据非常长,可以使用 itertools.izip 避免创建中间元组:

    import itertools as IT
    dates, vals = IT.izip(*data)
    s = pd.Series(vals, index=dates)
    

    【讨论】:

    • 我喜欢这个答案,因为这个将日期时间(键)设置为系列索引,这是这里的要求
    【解决方案3】:

    您可以使用zipsplat 来解压缩您的参数,如下所示。

    import pandas as pd
    
    my_list = [(datetime.datetime(2008, 7, 15, 15, 0), 0.134), 
            (datetime.datetime(2008, 7, 15, 16, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 17, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 18, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 19, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 20, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 21, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 22, 0), 0.0), 
            (datetime.datetime(2008, 7, 15, 23, 0), 0.0), 
            (datetime.datetime(2008, 7, 16, 0, 0), 0.0)]
    
    ts = pd.Series(zip(*my_list))
    

    zip(*my_list) 有效地从您的数据中创建了两个元组,一个是您的 datetime 对象的元组,一个是您的值。然后将这两个作为参数传递给pd.Series

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2022-12-10
      • 2020-06-03
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多