Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 用0填充缺少的日期(天)值_Python_Pandas_Indexing - Fatal编程技术网

Python 用0填充缺少的日期(天)值

Python 用0填充缺少的日期(天)值,python,pandas,indexing,Python,Pandas,Indexing,我有一个数据帧: day Datavalue 2020-06-01 3.179695 2020-06-02 0.132487 2020-06-08 3.179695 2020-06-09 3.179695 2020-06-10 3.179695 我想设置一个日期范围,并将任何不在数据框中的日期添加为0,例如: day Datavalue 2020-06-01 3.179695 2020-06

我有一个数据帧:

     day  Datavalue
    2020-06-01   3.179695
    2020-06-02   0.132487
    2020-06-08   3.179695
    2020-06-09   3.179695
    2020-06-10   3.179695
我想设置一个日期范围,并将任何不在数据框中的日期添加为0,例如:

     day  Datavalue
    2020-06-01   3.179695
    2020-06-02   0.132487
    2020-06-03   0
    2020-06-04   0
    2020-06-05   0
    2020-06-06   0
    2020-06-07   0
    2020-06-08   3.179695
    2020-06-09   3.179695
    2020-06-10   3.179695
我试过了

      mydates = pd.period_range(date - timedelta(40), date + timedelta(40)
      x = data.set_index('day') 
      x = data.reindex(mydates, fill_value=0)


但这只是将其全部设置为零

我做错了什么


谢谢

假设要对整个数据帧执行此操作,请使用asfreq:


类似这样的方法可能会奏效:

delta = 2 # number of days before first value and after last value (as it seems to be needed from your code)

mydates = pd.period_range(df.date.iloc[0] - timedelta(delta), df.date.iloc[-1] + timedelta(delta))

# Change PeriodIndex object to datetime type:
mydates = mydates.to_timestamp() 

# Create dates dataframe and merge with original df containing values
dates_df = pd.DataFrame(mydates, columns=['date'])
new_df= pd.merge(df, dates_df, on='date', how='outer').sort_values('date').fillna(0)

df.set_index'day'。重采样'1D'。这里求和有效吗?@datanovel好主意,但重采样组数据更适合下采样。asfreq是一种类似的方法,但速度更快,更适合此任务,感谢您的评论。感谢您为我指明了正确的方向,因为我还想在timeseries之前和之后几天扩展范围。我最终使用了新的_df=pd.mergedf,dates _df,on='day',how='right'。fillna0,它似乎工作得很好,因为原始df中的数据是datatime对象,我也将dates _df中的日期转换为datetime对象。
delta = 2 # number of days before first value and after last value (as it seems to be needed from your code)

mydates = pd.period_range(df.date.iloc[0] - timedelta(delta), df.date.iloc[-1] + timedelta(delta))

# Change PeriodIndex object to datetime type:
mydates = mydates.to_timestamp() 

# Create dates dataframe and merge with original df containing values
dates_df = pd.DataFrame(mydates, columns=['date'])
new_df= pd.merge(df, dates_df, on='date', how='outer').sort_values('date').fillna(0)