在 pandas 数据框中插入日期时间序列缺失值的行
insert rows for missing values of datetime series in pandas dataframes
我有一些时间序列,以1分钟的时间步长记录,没有记录,如果x的值为0。
数据文件如下所示:
Date;Time;x
20.02.2020;00:00:00;0.1
20.02.2020;00:03:00;0.4
20.02.2020;00:04:00;0.3
20.02.2020;00:05:00;0.3
20.02.2020;00:07:00;0.2
我想填写 x=0.0 的缺失记录。预期结果是:
Date;Time;x
20.02.2020;00:00:00;0.1
20.02.2020;00:01:00;0.0
20.02.2020;00:02:00;0.0
20.02.2020;00:03:00;0.4
20.02.2020;00:04:00;0.3
20.02.2020;00:05:00;0.3
20.02.2020;00:06:00;0.0
20.02.2020;00:07:00;0.2
我试过了:
import pandas as pd
with open('data.csv') as csv_file:
df = pd.read_csv(csv_file, delimiter=';',parse_dates={'datetime': ['Date', 'Time']})
df.set_index(['datetime'])
df.asfreq(freq='1Min', fill_value=0.0)
我得到:
datetime x
1970-01-01 1970-01-01 0.0
没有错误信息。怎么了?
因为你的set_index
操作没有发生,最好是链接你的方法:
df.set_index('datetime').asfreq('1min', fill_value=0).reset_index()
或 resample
:
df.set_index('datetime').resample('1min').first().fillna(0).reset_index()
datetime x
0 2020-02-20 00:00:00 0.1
1 2020-02-20 00:01:00 0.0
2 2020-02-20 00:02:00 0.0
3 2020-02-20 00:03:00 0.4
4 2020-02-20 00:04:00 0.3
5 2020-02-20 00:05:00 0.3
6 2020-02-20 00:06:00 0.0
7 2020-02-20 00:07:00 0.2
或修复您自己的代码:
df = df.set_index('datetime')
df.asfreq(freq='1Min', fill_value=0)
我有一些时间序列,以1分钟的时间步长记录,没有记录,如果x的值为0。 数据文件如下所示:
Date;Time;x
20.02.2020;00:00:00;0.1
20.02.2020;00:03:00;0.4
20.02.2020;00:04:00;0.3
20.02.2020;00:05:00;0.3
20.02.2020;00:07:00;0.2
我想填写 x=0.0 的缺失记录。预期结果是:
Date;Time;x
20.02.2020;00:00:00;0.1
20.02.2020;00:01:00;0.0
20.02.2020;00:02:00;0.0
20.02.2020;00:03:00;0.4
20.02.2020;00:04:00;0.3
20.02.2020;00:05:00;0.3
20.02.2020;00:06:00;0.0
20.02.2020;00:07:00;0.2
我试过了:
import pandas as pd
with open('data.csv') as csv_file:
df = pd.read_csv(csv_file, delimiter=';',parse_dates={'datetime': ['Date', 'Time']})
df.set_index(['datetime'])
df.asfreq(freq='1Min', fill_value=0.0)
我得到:
datetime x
1970-01-01 1970-01-01 0.0
没有错误信息。怎么了?
因为你的set_index
操作没有发生,最好是链接你的方法:
df.set_index('datetime').asfreq('1min', fill_value=0).reset_index()
或 resample
:
df.set_index('datetime').resample('1min').first().fillna(0).reset_index()
datetime x
0 2020-02-20 00:00:00 0.1
1 2020-02-20 00:01:00 0.0
2 2020-02-20 00:02:00 0.0
3 2020-02-20 00:03:00 0.4
4 2020-02-20 00:04:00 0.3
5 2020-02-20 00:05:00 0.3
6 2020-02-20 00:06:00 0.0
7 2020-02-20 00:07:00 0.2
或修复您自己的代码:
df = df.set_index('datetime')
df.asfreq(freq='1Min', fill_value=0)