沿主要(时间序列)轴延伸pandas面板框架

时间:2014-06-18 08:15:43

标签: python pandas panel time-series

我有一些时间序列数据以稍微奇怪的格式存储。我想将其解析为pandas.Panel

数据来自各个地点'。来自每个位置的数据在文件中是连续的,但是来自任何给定位置的时间序列被分成单独的块['一个位置的时间块之间应该没有重叠。

我一直在使用{<1}}将每个位置时间块读取到:

  • 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   

我尝试过排列:

  1. 在面板中设置新框架(planet_data.Mars.index is mars_data_all.index

  2. planet_data['AllMars'] = mars_data_all

  3. pandas.Panel.reindex

  4. 似乎我可能会对基础数据和它的观点感到困惑。我看过这些(12)相关问题,但我仍然坚持。感觉我可能错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

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

这有效:

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中引发垃圾收集问题。这可能是一种更好的方法。

现实生活中的数据比我的示例代码中的数据更大,更毛茸茸,更错位。这么多,reindex将不起作用。

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