【问题标题】:Array length does not match index length数组长度与索引长度不匹配
【发布时间】:2018-02-22 13:58:13
【问题描述】:

我希望将几个不同日期的时间序列合并到一个数据框中。

每个时间序列的列名是datepx

我创建了一个日期索引dates 并尝试通过以下方式合并所有时间序列:

dates = pd.date_range('01/01/2017', periods=12, freq='M')

df = pd.DataFrame({
   'date': dates,
   'a': df2['px'],
   'b': df3['px']
   .
   .
   etc
})

预期输出:

      date          a           b           c           d           e
2017-01-31    -0.4579         nan           .           .           .
2017-02-28     0.5787         nan           .           .           .
2017-03-31    -2.2319     -1.0244         etc         etc         etc
2017-04-30    -2.0713     -2.1069
2017-05-31        nan      2.0158
2017-06-30        nan      1.0541
2017-07-31        nan      1.8901
2017-08-31        nan         nan
2017-09-30        nan         nan
.
.
etc

【问题讨论】:

    标签: pandas date time-series


    【解决方案1】:

    IIUC:

    dfs = [df1,df2,df3]
    pd.concat([df.set_index('date') for df in dfs], axis=1).reset_index()
    

    【讨论】:

    • 这太棒了!是否最好仅使用 df.columns 重命名列?
    • @J.D.Marlin,这取决于...你想如何命名它们?
    • 可能多达 30 个左右。每个单独的时间序列都有datepxpx_2px_3 等,当将它们连接在一起时,我希望它们为a'a_2a_3b、@ 987654331@、b_3
    • 你能发布print(concatenated_df.columns.tolist())的输出吗?
    【解决方案2】:

    数据框的所有列都必须具有相同的长度,因此您不能从不同长度的系列中创建数据框。您可以在参数 how = 'outer' 的情况下使用多个合并,类似这样。

    df1.merge(df2, on = 'date', how = 'outer').merge(df3, on = 'date', how = 'outer')
    

    由于您没有提供单个系列的sn-ps,因此很难在此处尝试代码并显示输出。

    【讨论】:

      猜你喜欢
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      相关资源
      最近更新 更多