Python 填补大型数据集中的时间戳缺口

Python 填补大型数据集中的时间戳缺口,python,pandas,data-science,Python,Pandas,Data Science,我有一个数据集,有超过100K行,这个数据集中有一列是Datetime列,我们把它命名为a 我的数据集按A列排序 我想“填补”我的数据集的空白,即:如果我有两行紧随其后: 0 2019-03-13 08:12:20 1 2019-03-13 08:12:25 我想在它们之间添加缺失的秒数,因此,我将有以下内容: 0 2019-03-13 08:12:20 1 2019-03-13 08:12:21 2 2019-03-13 08:12:22 3 2019-03-13 08:12:2

我有一个数据集,有超过100K行,这个数据集中有一列是Datetime列,我们把它命名为
a

我的数据集按A列排序

我想“填补”我的数据集的空白,即:如果我有两行紧随其后:

0  2019-03-13 08:12:20
1  2019-03-13 08:12:25
我想在它们之间添加缺失的秒数,因此,我将有以下内容:

0  2019-03-13 08:12:20
1  2019-03-13 08:12:21
2  2019-03-13 08:12:22
3  2019-03-13 08:12:23
4  2019-03-13 08:12:24
5  2019-03-13 08:12:25
如果两行的日期、月份或年份不同,我不想在两行之间生成行

因此,如果有这两个连续的行:

0  2019-03-13 08:12:20
1  2019-03-15 08:12:21
0  2019-03-13 08:12:20
1  2019-03-15 11:12:21
我不想补充什么

如果两行之间的时间差大于2小时,我也无法生成行

因此,如果有这两个连续的行:

0  2019-03-13 08:12:20
1  2019-03-15 08:12:21
0  2019-03-13 08:12:20
1  2019-03-15 11:12:21
我不想补充什么

下面是一个例子来说明我想要什么:

df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
                     A
0  2019-03-13 08:12:20
1  2019-03-13 08:12:25
2  2019-03-20 08:17:23
3  2019-03-22 08:17:25
4  2019-03-22 11:12:20
5  2019-03-22 11:12:23
6  2019-03-24 12:33:23
最后,我想得到这个结果:

                      A
0   2019-03-13 08:12:20
1   2019-03-13 08:12:21
2   2019-03-13 08:12:22
3   2019-03-13 08:12:23
4   2019-03-13 08:12:24
5   2019-03-13 08:12:25
6   2019-03-20 08:17:23
7   2019-03-22 08:17:25
8   2019-03-22 11:12:20
9   2019-03-22 11:12:21
10  2019-03-22 11:12:22
11  2019-03-22 11:12:23
12  2019-03-24 12:33:23
我试过这个:

作为pd进口熊猫

df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
df['A']=pd.to_datetime(df['A'])
fill = [pd.date_range(df.iloc[i]['A'], df.iloc[i+1]['A'], freq='S') for i in range(len(df)-1) if (df.iloc[i+1]['A']-df.iloc[i]['A']).total_seconds()<=7200]
dates = [item for sublist in fill for item in sublist]
df=df.set_index('A').join(pd.DataFrame(index=pd.Index(dates, name='A')), how='outer').reset_index()
print(df)
df=pd.DataFrame({'A':[“2019-03-13 08:12:20”,“2019-03-13 08:12:25”,“2019-03-20 08:17:23”,“2019-03-22 08:17:25”,“2019-03-22 11:12:20”,“2019-03-22 11:12:23”,“2019-03-24 12:33:23”]))
df['A']=pd.to_datetime(df['A'])

如果(df.iloc[i+1]['A']-df.iloc[i]['A'],总秒数()您可以使用和创建一列,其中组号的两个连续行之间的差异小于2小时。然后使用a列,以便能够对每个组进行排序,并选择所需的列

df['gr'] = df.A.diff().gt(pd.Timedelta(hours=2)).cumsum()
df_output = df.set_index('A').groupby('gr', as_index=False).resample('s').sum().reset_index()[['A']]
print (df_output)
                     A
0  2019-03-13 08:12:20
1  2019-03-13 08:12:21
2  2019-03-13 08:12:22
3  2019-03-13 08:12:23
4  2019-03-13 08:12:24
5  2019-03-13 08:12:25
6  2019-03-20 08:17:23
7  2019-03-22 08:17:25
8  2019-03-22 11:12:20
9  2019-03-22 11:12:21
10 2019-03-22 11:12:22
11 2019-03-22 11:12:23
12 2019-03-24 12:33:23

从你的例子来看,它们也必须具有相同的小时和分钟。也许你可以尝试使用pandas来比较连续值,并且仅当差值小于2小时时才重新采样为1。@ec2604我给出的示例只是为了说明,我无法在此处复制/粘贴3xxx行lol(3xxx如果连续两行的日期、年份和月份相同,但差值大于1h且小于2h)@baccandr,对不起,我对Python和Pandas有点陌生,你能给我一个使用此函数的示例吗?