使用所有日期填充日期时间索引

Infill datetime index with all dates

提问人:spcol 提问时间:10/30/2023 最后编辑:wjandreaspcol 更新时间:11/17/2023 访问量:62

问:

我有一个具有各种日期的数据帧,并且该日期等效值。

但是,我想要一个 DataFrame,通过该 DataFrame,将每一天都计算在内,并用以前的值填充空日。

所以目前我有

            Value
01/01/2013  23
09/01/2013  43
13/01/2013  12
19/01/2013  35

我想:

            Value
01/01/2013  23
02/01/2013  23
03/01/2013  23
04/01/2013  23
05/01/2013  23
06/01/2013  23
07/01/2013  23
08/01/2013  23
09/01/2013  43
10/01/2013  43
11/01/2013  43
12/01/2013  43
13/01/2013  12
14/01/2013  12
15/01/2013  12
16/01/2013  12
17/01/2013  12
18/01/2013  12
19/01/2013  35
Python 熊猫 日期 日期时间

评论

3赞 BigBen 10/30/2023
如果有 DatetimeIndex,则 .df.resample('D').ffill()
0赞 wjandrea 10/30/2023
你试过什么,你卡在哪里?比如,你知道重新采样吗?

答:

0赞 tetris programming 10/31/2023 #1

在这里使用将是正确的举动。df.resample

对时间序列数据进行重新采样。

频率转换和时间重采样的便捷方法 系列。该对象必须具有类似 datetime 的索引 (DatetimeIndex, PeriodIndex 或 TimedeltaIndex),否则调用方必须传递 on/level 关键字参数的类似 DateTime 的 Series/Index。https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.resample.html

一个基本示例可能如下所示:

import pandas

df = pandas.read_csv("dat.csv", sep=";", header=None)
# first we turn the index of our dataframe into a DatetimeIndex
df.set_index(0, inplace=True)
df.index = pandas.to_datetime(df.index, format="%d/%m/%Y")
# Now we fill up the Index the missing Days and its Values
df = df.resample("D").ffill()

示例 dat.csv

01/01/2013; 23
09/01/2013; 43
13/01/2013; 12
19/01/2013; 35

评论

0赞 wjandrea 10/31/2023
更容易为您处理所有设置: .read_csvparse_dates=[0], dayfirst=True, index_col=0
0赞 wjandrea 10/31/2023
另外,您为什么要费心使用逗号之外的分隔符并删除标题?如果您只使用逗号并在顶部拍打,则示例更简单并且与问题匹配。,Value
0赞 tetris programming 10/31/2023
我明白了,我喜欢这个想法。它确实使一切变得更加顺利。df=pandas.read_csv("dat.csv", parse_dates=[0], dayfirst=True, index_col=0),Value
0赞 EvensF 11/17/2023 #2

如果您已经有了数据帧,就像您在描述中所说的那样,它可能如下所示:

import pandas as pd

original_values = pd.DataFrame(
    {'Value': [23, 43, 12,35]},
    index = pd.DatetimeIndex(['2013-01-01', '2013-01-09', '2013-01-13', '2013-01-19'])
)

output_values = original_values.resample('D').ffill()

print(output_values)

但是,如果您的值来自 CSV 文件,例如:

Input_data.csv

01/01/2013, 23
09/01/2013, 43
13/01/2013, 12
19/01/2013, 35

然后,您可以使用类似的东西来获得相同的结果:

import pandas as pd

original_values = pd.read_csv(
    'Input_data.csv', 
    header=None,
    names=['Date', 'Value'],
    index_col='Date', 
    parse_dates=True, 
    date_format='%d/%m/%Y'
)

output_values = original_values.resample('D').ffill()

print(output_values)