使用日期索引将新数据插入数据框

Inserting new data to dataframe with Date index

我有一个如下所示的 DF,其中日期值作为索引

我在一个数组中有 6 个值,我又向同一个数组添加了 6 个值,例如:

现在我需要将全部 12 个值附加到具有新日期索引值的同一个数组,如下所示:

当我尝试使用 test['value'] = new_values 设置值时,出现以下错误:

ValueError:值的长度 (18) 与索引的长度 (12) 不匹配

请帮忙

从你的问题中不清楚你是如何得到你提到的错误的,因为你没有展示你是如何创建 DataFrame 和数组的。

通过简单地重新分配单个列来调整 DF 的大小是不常见的,如果您考虑其他列在那种情况下应该如何表现,如果 DF 具有这些列,这对您来说应该很自然。相反,要调整 DF 的大小,我们通常使用专门函数之一 pd.concatpd.DataFrame.mergepd.DataFrame.join.

我会使用 pd.concat 来处理这种情况;更具体地说,使用 仅使用新值和索引 创建一个新的 DataFrame,并将其与旧值连接起来。


重现场景

这是尝试重新创建与您的起点类似的东西;即初始DF.

import numpy as np
import pandas as pd

init_index = np.arange(
    np.datetime64("2021-07"),
    np.datetime64("2022"),
    np.timedelta64(1, "M")
)
init_values = np.random.rand(6, 1)

init_df = pd.DataFrame(
    data=values,
    index=index,
    columns=["values"]
)

# >>> init_df
#               values
# 2021-07-01  0.002215
# 2021-08-01  0.064340
# 2021-09-01  0.595143
# 2021-10-01  0.822837
# 2021-11-01  0.568886
# 2021-12-01  0.382716

这是重新创建 new_values 数组的相同尝试。我假设,根据您包含的图像,它不是一个简单的值列表,而是一个值列表列表,每个值列表包含一个值(即形状为 (6, 1) 的二维数组)。

new_values = np.concatenate((init_df["values"], np.random.rand(6,1)))

# >>> all_values
# array([[0.00221483],
#        [0.0643404 ],
#        [0.59514306],
#        [0.82283698],
#        [0.56888584],
#        [0.38271593],
#        [0.23964758],
#        [0.90354089],
#        [0.12688775],
#        [0.53930331],
#        [0.99087057],
#        [0.12583731]])

希望这与您正在使用的内容足够接近。


实际解决方案

对于我的方法,我们创建一个仅包含新数据和新日期的新 DF:

all_values = new_values
new_values = all_values[7:]
new_index = np.arange(
    np.datetime64("2021"),
    np.datetime64("2021-07"),
    np.timedelta64(1, "M")
)
new_df = pd.DataFrame(
    data=new_values,
    index=new_index,
    columns=["values"]
)

# >>> new_df
#               values
# 2021-01-01  0.239648
# 2021-02-01  0.903541
# 2021-03-01  0.126888
# 2021-04-01  0.539303
# 2021-05-01  0.990871
# 2021-06-01  0.125837

然后使用 pd.concat:

连接两个 DF
final_df = pd.concat([init_df, new_df])

# >>> final_df
#               values
# 2021-07-01  0.002215
# 2021-08-01  0.064340
# 2021-09-01  0.595143
# 2021-10-01  0.822837
# 2021-11-01  0.568886
# 2021-12-01  0.382716
# 2021-01-01  0.239648
# 2021-02-01  0.903541
# 2021-03-01  0.126888
# 2021-04-01  0.539303
# 2021-05-01  0.990871
# 2021-06-01  0.125837