提问人:spcol 提问时间:10/30/2023 最后编辑:wjandreaspcol 更新时间:11/17/2023 访问量:62
使用所有日期填充日期时间索引
Infill datetime index with all dates
问:
我有一个具有各种日期的数据帧,并且该日期等效值。
但是,我想要一个 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
答:
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_csv
parse_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)
上一个:使用所有日期填充日期时间索引
评论
df.resample('D').ffill()