首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对齐多个数据格式的索引,并在Pandas中填写相应的缺失值?

如何对齐多个数据格式的索引,并在Pandas中填写相应的缺失值?
EN

Stack Overflow用户
提问于 2016-06-23 03:09:52
回答 1查看 3.3K关注 0票数 3

我有4个具有类似日期时间索引数据的数据,但是在每一个数据中都缺少几行,而且我知道可以使用以前的已知数据来填补空白。

我想‘对齐’这些数据格式,这样它们就可以合并所有数据格式的索引,并填充缺失的值。我知道如何对2个数据文件执行此操作:df1, df2 = df1.align(df2, axis=0, method='pad'),但是在超过2个的情况下,有什么好的方法可以这样做呢?

我试过了,但它确实奏效了:

代码语言:javascript
复制
df1 = pd.DataFrame({'values': 1}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-03']))
df2 = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-06-04', '2016-06-07']))
df3 = pd.DataFrame({'values': 3}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-05']))

commonIndex = df1.index.join(df2.index, how='outer').join(df3.index, how='outer')

for d in [df1, df2, df3]:
    d = d.reindex(index=commonIndex, method='pad')

然而,当我对实际数据尝试相同的方法时,它会出现错误:"ValueError: index必须是单调增加或减少“。这是价格数据,指数如下所示:

代码语言:javascript
复制
DatetimeIndex(['2014-03-24 00:00:00', '2014-03-24 00:01:00',
           '2014-03-24 00:02:00', '2014-03-24 00:03:00',
           '2014-03-24 00:04:00', '2014-03-24 00:05:00',
           '2014-03-24 00:06:00', '2014-03-24 00:07:00',
           '2014-03-24 00:08:00', '2014-03-24 00:09:00',
           ...
           '2014-10-10 17:51:00', '2014-10-10 17:52:00',
           '2014-10-10 17:53:00', '2014-10-10 17:54:00',
           '2014-10-10 17:55:00', '2014-10-10 17:56:00',
           '2014-10-10 17:57:00', '2014-10-10 17:58:00',
           '2014-10-10 17:59:00', '2014-10-10 18:00:00'],
          dtype='datetime64[ns]', name=u'datetime', length=139671, freq=None)

据我所知,这个数字应该会增加。不确定“单调”,但我认为这不是一个约束,如上面的例子(仍然有缺失的日期)。

任何帮助都是非常感谢的,如果我没有使用正确的术语,请原谅我。

当我迭代数据文件列表时,看起来它们在应用重新索引后并没有实际保存在df1、df2、df3中。我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 03:23:50

这就是你想要达到的行为吗?请注意,无论数据文件上的索引是否单调,此方法都能工作。

代码语言:javascript
复制
df1 = pd.DataFrame({'values': 1}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-03']))
df2 = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-06-04', '2016-06-07']))
df3 = pd.DataFrame({'values': 3}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-05']))

df = pd.concat([df1,df2,df3], axis=1).ffill().bfill()
df.columns = ['values1', 'values2', 'values3']
df

这意味着:

代码语言:javascript
复制
          values1  values2  values3
2016-05-04  1.0     2.0     3.0
2016-06-01  1.0     2.0     3.0
2016-06-02  1.0     2.0     3.0
2016-06-03  1.0     2.0     3.0
2016-06-05  1.0     2.0     3.0

或者,如果您只想让数据帧分开,那么不管数据帧是否具有单调索引,这也是有效的。

代码语言:javascript
复制
commonIndex = df1.index | df2.index | df3.index
df2.reindex(commonIndex).ffill()

编辑:

我这里有一个片段,它复制了您的错误,但是我认为它作为自己的问题工作得更好,所以take a look here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37981678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档