我正在开始学习这个很棒的工具,但我陷入了加载多个时间序列并将它们与“主”日期向量对齐的简单任务。
例如:我有一个 csv 文件:Data.csv,其中第一行包含标题“Date1、Rate1、Date2、Rate2”
,其中 Date1 是 Rate1 的日期,Date2 是Rate2 的日期。
在这种情况下,Rate2 有更多的观测值(开始日期与 Date1 相同,但结束日期比 Date1 中的结束日期相距更远,并且缺失值更少),并且所有内容都应根据日期2。
获取以下 DataFrame 的首选方式是什么? (或完成类似的事情)
index(Date2) Rate1 Rate2
11/12/06 1.5 1.8
12/12/06 NaN 1.9
13/12/06 1.6 1.9
etc
etc
11/10/06 NaN 1.2
12/10/06 NaN 1.1
13/10/06 NaN 1.3
我尝试按照官方 pandas.pdf 和谷歌搜索中的示例进行操作,但无济于事。 (我什至买了麦金尼先生的 Pandas 书的预版,但有关 Pandas 的章节还没有准备好:()
有什么好的食谱吗?
非常感谢
编辑:关于将系列分成两个 .CSV 文件的答案: 但是如果我有很多时间序列怎么办,例如
日期 1 价格 1 日期 2 价格 2 ... 日期 N 价格 N
我所知道的是,日期应该几乎相同,异常(exception)来自包含缺失值的系列(没有日期或利率条目)(这将是一些金融经济学时间序列的示例,由方式)
加载此数据集的首选方法仍然是将每个系列拆分为单独的 .CSV 吗?
EDIT2 archlight 是完全正确的,仅仅执行“csv_read”就会把事情搞砸。
基本上,我的问题可以归结为:如何加入几个未对齐的时间序列,其中每个序列都有一个日期列,以及该序列本身的列(从 Excel 导出的 .CSV 文件)
再次感谢
最佳答案
我认为没有必要将数据拆分为多个文件。如何使用 read_csv
加载文件并将每个日期/速率对转换为单独的时间序列?所以你的代码看起来像:
data = read_csv('foo.csv')
ts1 = Series(data['rate1'], index=data['date1'])
ts2 = Series(data['rate2'], index=data['date2'])
现在,要将数据连接在一起并对齐 DataFrame 中的数据,您可以执行以下操作:
frame = DataFrame({'rate1': ts1, 'rate2': ts2})
这将形成 ts1
和 ts2
中日期的并集并对齐所有数据(在适当的位置插入 NA 值)。
或者,如果你有 N 个时间序列,你可以这样做:
all_series = {}
for i in range(N):
all_series['rate%d' % i] = Series(data['rate%d' % i], index=data['date%d' % i])
frame = DataFrame(all_series)
根据我的经验,这是一种非常常见的模式
关于python - 使用一个索引将未对齐的时间序列加载到 DataFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883805/