【问题标题】:Extending a pandas panel frame along the major (timeseries) axis沿主(时间序列)轴扩展 pandas 面板框架
【发布时间】:2014-06-18 08:15:42
【问题描述】:

我有一些时间序列数据以一种有点奇怪的格式存储。我想把它解析成pandas.Panel

数据来自不同的“位置”。来自每个位置的数据在文件中是连续的,但来自任何给定位置的时间序列被分成单独的“块”。一个位置的时间块之间不应有重叠。

我一直在将每个位置时间块读入pandas.Panel,其中:

  • Item axis = location
  • Major axis = DatetimeIndex

我想扩展Panel 的轴以适应位置时间轴的任何新块。

import numpy as np
import pandas as pd

# we'll get data like this from the file
time_chunk_1 = pd.date_range(start='2010-10-01T00:00:00', periods=20,
                              freq='10S')                                  
fake_data = np.cumsum(np.random.randn(len(time_chunk_1)))                                  
mars_data_1 = pd.DataFrame(data=fake_data, index=time_chunk_1,
                    columns=['X'])                    
pluto_data_1 = pd.DataFrame(data=fake_data, index=time_chunk_1,
                    columns=['X']) 

# gather the data in a panel
planet_data = pd.Panel(data={'Mars': mars_data_1, 'Pluto': pluto_data_1}) 

# further down the file we'll encounter data like this
time_chunk_2 = pd.date_range(start='2010-10-01T00:03:20', periods=20,
                              freq='10S')                                  
mars_data_2 = pd.DataFrame(data=fake_data[::-1], index=time_chunk_2,
                    columns=['X'])    

# I can make a DataFrame of the whole Mars time-series                   
mars_data_all =  planet_data['Mars'].append(mars_data_2) 

# but setting a frame of the panel doesn't extend the major axis
planet_data['Mars'] =  mars_data_all   

在我收集完这些块之后,我希望以下内容属实:

planet_data.Mars.index is mars_data_all.index

我尝试了以下排列:

  1. 在面板中设置新框架 (planet_data['AllMars'] = mars_data_all)

  2. pandas.Panel.reindex

  3. pandas.Panel.replace

似乎我可能对基础数据和对其的看法感到困惑。我看过这些(12)相关的问题,但我仍然卡住了。感觉好像我可能遗漏了一些明显的东西。

【问题讨论】:

    标签: python pandas panel time-series


    【解决方案1】:

    我发现以下工作,对于“工作”的某些价值。我没有代表快速回答我自己的问题,所以这个答案 1st 作为评论出现。

    这行得通:

    planet_data = planet_data.reindex(major_axis=mars_data_all.index)
    planet_data['Mars'] = mars_data_all
    

    在它通过的意义上:

    assert(0 is all(planet_data.Mars.X - mars_data_all.X))
    assert(planet_data.Mars.index is mars_data_all.index) 
    

    对于一个重要的数据集,我怀疑我们会遇到this answer 中提出的哈希表没有得到垃圾收集的问题。这样做可能有更好的方法。

    与我的示例代码中的数据相比,数据在现实生活中变得更大、更毛茸茸且更错位。如此之多,reindexing 将无法正常工作。

    我最终可能会使用DataFrames 中的dict 而不是Panel 作为我的外部数据结构。

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 2017-06-18
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2011-01-22
      • 2018-01-29
      • 2021-05-18
      • 2015-04-03
      相关资源
      最近更新 更多