1

我开始学习这个很棒的工具,我被困在加载几个时间序列并将它们与“主”日期向量对齐的简单任务上。

例如:我有一个 csv 文件:Data.csv,其中第一行包含标题"Date1, Rate1, Date2, Rate2",其中 Date1 是 Rate1 的日期,Date2 是 Rate2 的日期。

在这种情况下,Rate2 有更多的观察值(开始日期与 Date1 相同,但结束日期比 Date1 中的结束日期更远,并且缺失值较少),所有内容都应根据 Date2 进行索引。

获取以下 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 和谷歌搜索中的示例进行操作,但无济于事。(我什至买了麦金尼先生的熊猫书的预版,但是关于熊猫的章节还没有准备好:()

有这个很好的食谱吗?

非常感谢

编辑:关于将系列分成两个 .CSV 文件的答案:但是如果我有很多时间序列怎么办,例如

日期 1 比率 1 日期 2 比率 2 ... 日期 N 比率 N

我所知道的是日期应该几乎相同,但来自包含缺失值的序列的例外情况(没有日期或利率条目)(顺便说一下,这将是一些金融经济学时间序列的一个例子)

加载此数据集的首选方法是否仍将每个系列拆分为单独的 .CSV?

EDIT2 archlight 是完全正确的,只是做“csv_read”会把事情搞砸。

基本上我的问题可以归结为:如何加入几个未对齐的时间序列,其中每个系列都有一个日期列,以及系列本身的列(从 Excel 导出的 .CSV 文件)

再次感谢

4

2 回答 2

2

我认为没有必要将数据拆分为多个文件。如何加载文件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})

这将形成日期的联合,ts1ts2对齐所有数据(在适当的情况下插入 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)

这是我的经验中非常常见的模式

于 2012-06-05T15:00:27.223 回答
1

如果您确定 Date1 是 Date2 的子集并且 Date2 不包含空值,您可以简单地执行

df = read_csv('foo.csv', index_col=2, parse_dates=True)
df = df[["rate1", "rate2"]]

但是如果 Date2 有 Date1 没有的日期,那将会很复杂。我建议您将日期/速率对放在单独的文件中,并将日期作为通用标题

df1 = read_csv('foo1.csv', index_col=0, parse_dates=True)
df2 = read_csv('foo2.csv', index_col=0, parse_dates=True)
df1.join(df2, how="outer")

编辑: 这种方法看起来不太好。因此,对于您的日期时间中的 NaN,您可以这样做

dateindex2 = map(lambda x: datetime(int("20"+x.split("/")[2]), int(x.split("/")[0]), int(x.split("/")[1])), filter(notnull, df['Date2'].values))
ts2 = Series(df["Rate2"].dropna(), index=dateindex2)
#same for ts1
df2 = DataFrame({"rate1":ts1, "rate2":ts2})

问题是您必须确保存在日期之类的情况但不存在费率。因为 dropna() 将移动记录并与索引不匹配

于 2012-06-05T04:47:09.123 回答