Python 填充数据帧以填充边界

Python 填充数据帧以填充边界,python,pandas,dataframe,Python,Pandas,Dataframe,我试图创建一个函数来填充一个具有“datetime”索引的数据帧 因此,我们的想法是在数据帧之前和/或之后添加一些“填充数据”,以使其适合给定的时间帧(begin和end) 先前已对输入数据帧进行了重采样d。freq参数与数据帧的采样频率相同 我对任何其他更“泛ASIC”的解决方案持开放态度 def pad_数据帧( 数据帧, 开始:datetime.datetime, 结束:datetime.datetime, *, 列:列表[str], 索引:str, 数据:可调用[[datetime.da

我试图创建一个函数来填充一个具有“datetime”索引的
数据帧

因此,我们的想法是在数据帧之前和/或之后添加一些“填充数据”,以使其适合给定的时间帧(
begin
end

先前已对输入数据帧进行了
重采样
d。
freq
参数与数据帧的采样频率相同

我对任何其他更“泛ASIC”的解决方案持开放态度

def pad_数据帧(
数据帧,
开始:datetime.datetime,
结束:datetime.datetime,
*,
列:列表[str],
索引:str,
数据:可调用[[datetime.datetime],任意],
freq:datetime.timedelta,
):
first=df.axes[0][0]。to_pydatetime()
last=df.axes[0][-1]。到_pydatetime()
to_concat=[]
如果第一次>开始:
pre_df=pd.DataFrame(
列=列,
资料=[
数据(开始),
数据(first-datetime.timedelta(微秒=1)),
],
).set_索引(索引)
#TODO:修复
#{TypeError}仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但获得了“Index”的实例
附加到(预测向重采样(freq).fillna(method=“nearest”))
附加到_concat.append(df)
如果最后一次<结束-频率:
post_df=pd.DataFrame(
列=列,数据=[数据(上次+频率),数据(结束)]
).set_索引(索引)
post_-df.index=pd.to_-datetime(post_-df.index,utc=True)
附加到(后测向重采样(freq).fillna(method=“nearest”))
返回pd.concat(至_concat)
并且是这样使用的:

begin=datetime.fromisoformat(“2016-12-20 08:00:00+00:00”)
结束=日期时间。从ISOFORMAT(“2016-12-20 10:07:00+00:00”)
频率=时间增量(分钟=3)
df=一些其他函数()
df=pad_数据帧(
df,
开始,
完,,
列=[“时间戳”,“计数”],
index=“timestamp”,
数据=λdt:[dt,0],
freq=freq,
)
这就是我所期望的:

         begin                    end
          |------------------------|

input             |----------------|
output    |ooooooo-----------------|

input     |----------------|
output    |-----------------ooooooo|

input             |-----------|
output    |ooooooo-------------oooo|

input     |------------------------|
output    |------------------------|

如果数据帧超出了
开始-结束
边界,我不确定我更喜欢什么:异常还是不填充。也许一个额外的布尔
strict
参数将是一个可接受的解决方案


现在,我的函数在重采样时出现了问题,但是在
pandas
世界中,也许一个完全不同的解决方案会更有意义。

好的,我找到了解决方案。 其想法是创建一个“空”DF,其所需周期在边界内。然后将其与输入DF“合并”。之后进行一点清理,就可以了


def get_frame_数据帧_之间(
开始:datetime.datetime,结束:datetime.datetime,频率:datetime.timedelta
)->数据帧:
min\u accepted\u freq=datetime.timedelta(分钟=1)
期间=(
pd.周期范围(开始、结束、频率=最小接受频率)
.to_frame()
.重采样(频率)
.fillna(方法=“最近”)
.drop(列=[0])
)
重现期
def pad_数据帧(
数据帧,
开始:datetime.datetime,
结束:datetime.datetime,
*,
填充值:dict[str,Any],
freq:datetime.timedelta,
)->数据帧:
时段=获取帧与数据帧之间的间隔(开始、结束、频率)
out=pd.concat([df.to_period(),periods],轴=1)
out.index.name=df.index.name
out.fillna(value=fill\u值,inplace=True)
返回
使用它:

candle=pad\u数据帧(
df,
开始,
完,,
填充值={“计数”:0},
freq=freq,
)