我有一些时间序列数据以稍微奇怪的格式存储。我想将其解析为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
我尝试过排列:
答案 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
作为我的外部数据结构。