Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将缺少的日期添加到时间序列数据框_Python_Pandas_Datetime_Time - Fatal编程技术网

Python 将缺少的日期添加到时间序列数据框

Python 将缺少的日期添加到时间序列数据框,python,pandas,datetime,time,Python,Pandas,Datetime,Time,我有一个时间序列数据框,其中包含多个城市的年温度值,但对于一些城市,我缺少一组日期 数据帧示例 ID Date City PRCP TAVG TMAX TMIN abcd1 2020-01-01 Zurich 0 -1.9 -0.9 -2.9 abcd1 2020-01-02 Zurich 9.1 8.8 12.7 4.9 abcd1 2020-01-03 Zurich 0.8

我有一个时间序列数据框,其中包含多个城市的年温度值,但对于一些城市,我缺少一组日期

数据帧示例

ID      Date        City    PRCP    TAVG    TMAX    TMIN
abcd1   2020-01-01  Zurich  0       -1.9    -0.9    -2.9
abcd1   2020-01-02  Zurich  9.1      8.8    12.7    4.9
abcd1   2020-01-03  Zurich  0.8      8.55   13.2    3.9
abcd1   2020-01-04  Zurich  0        4.1    10.8    -2.6

.
.
abcd9   2020-01-01 Singapore 4.1    5.9     0.3     3.1
abcd9   2020-01-04 Singapore 0.32   13.78   4.22    9   
abcd9   2020-01-28 Singapore 9.42   11.32   5.34    8.33
...
现在假设每个月缺少几个日期,因此
Date
列中的总天数为300天。我想将剩余的天数添加到数据集中,并将
nulls(NaN)
分配到
TMAX,TMIN.
列中,以使总天数为365天

这就是我现在正在做的

df_list = []

for (columns, group) in df.groupby(['ID', 'City']):
    idx = pd.MultiIndex.from_product([group['ID'].unique(),
                                      pd.date_range(group['Date'].min().replace(day=1), end=group['Date'].max(), freq='D')],
                                     names=['ID', 'Date'])
    group = group.set_index(['ID', 'Date']).reindex(idx).reset_index()
    group['City'] = group['City'].fillna(method='bfill')
    df_list.append(group)

data = pd.concat(df_list, ignore_index=True)
这样做的目的是填充
开始索引
结束索引
之间的日期(并将这些日期的NaN填充到PRCP、TMIN、TMAX、TAVG),但即使这样,我也会丢失一些日期,即计数不等于365

e、 g如果源文件包含10月1日至10月28日的数据,上述数据将添加此范围内的任何缺失日期,但不会将29、30、31添加到数据集


是否有一种方法可以计算从
1月1日
31月
的所有日期(年份不相关,忽略闰年)对于my
City
列中的所有城市。

可以使用自定义函数在数据框中添加缺少的日期。在
GroupBy中重新索引
。应用
,然后重新分配索引:

df['Date'] = pd.to_datetime(df['Date'])

f = lambda x: x.reindex(pd.date_range(pd.to_datetime('2020-01-01'), pd.to_datetime('2020-12-31'), name='date'))
df = df.set_index('Date').groupby(['ID','City']).apply(f).drop(['ID','City'], axis=1)

什么是<代码> ID >代码>列(也许<代码>代码>代码>?@ Corralien是的,EdiTIFF您不考虑年和闰年,是否可以通过<代码>年份< /代码>替换<代码>日期/代码>?这种工作(用<代码> ReStIB索引()/代码>),但是我的其他栏<代码> TMAX,TMIN…
all had NaNs,即整个年度数据都有NaNs检查日期列的数据类型,并将其转换为第一行中提到的日期时间。我之前也犯过同样的错误,还是同样的错误。在你的案例中,你用ID替换代码了吗?以下是您可以接受的输出答案,如果其有效:)