Pandas add one day to column

后端 未结 6 1850
情歌与酒
情歌与酒 2020-12-24 05:10

I need to add 1 day to each date I want to get the begining date of the following month eg 2014-01-2014 for the 1st item in the dataframe. Tried:

montdist[\         


        
相关标签:
6条回答
  • 2020-12-24 05:27

    I think that the cleanest way to do this is a variant of szu's answer. Pandas has nearly full support datetime built into its functionality, so there is no need to load datetime; instead, if you are already using pandas, create the new column like this:

    mondist['shifted_date'] = mondist.date + pd.Timedelta(days=1)
    
    0 讨论(0)
  • 2020-12-24 05:38

    Try to use timedelta():

    mondist['shifted_date']=mondist.date + datetime.timedelta(days=1)
    
    0 讨论(0)
  • 2020-12-24 05:38

    As far as I can tell tshift is a bit faster than doing math such as + pd.DateOffset etc. Of course it only applies to Series or Dataframe indices, not columns.. but you could do:

    df['newdate'] = pd.Series(index=df.index).tshift(periods=1, freq='D').index
    

    If your df is large, this may shave off half the time - at least it did for me, which is why I'm using it.

    0 讨论(0)
  • 2020-12-24 05:38

    One quick mention. if you are using data-frames and your datatype is datetime64[ns] non indexed, Then I would go as below: Assuming the date column name is 'Date to Change by 1' and you want to change all dates by 1 day.

    import time
    from datetime import datetime, timedelta, date, time
    
    before
    ['Date to Change by 1'] = 1/31/2020
    
    df['Date to Change by 1'] = (pd.to_datetime(df['Date to Change by 1']) + 
    timedelta(1)
    
    After
    ['Date to Change by 1'] = 2/01/2020
    
    0 讨论(0)
  • 2020-12-24 05:41

    No need to turn into an index. Just using .apply() works:

    df['newdate'] = pd.to_datetime(df['date']).apply(pd.DateOffset(1))
    
    0 讨论(0)
  • 2020-12-24 05:43

    Make it a DatetimeIndex first:

    pd.DatetimeIndex(montdist['date']) + pd.DateOffset(1)
    

    Note: I think there is a feature request that this could work with date columns...

    In action:

    In [11]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
    
    In [12]: df['date'] = pd.to_datetime(['21-11-2013', '22-11-2013'])
    
    In [13]: pd.DatetimeIndex(df.date) + pd.DateOffset(1)
    Out[13]: 
    <class 'pandas.tseries.index.DatetimeIndex'>
    [2013-11-22 00:00:00, 2013-11-23 00:00:00]
    Length: 2, Freq: None, Timezone: None
    
    In [14]: pd.DatetimeIndex(df.date) + pd.offsets.Hour(1)
    Out[14]: 
    <class 'pandas.tseries.index.DatetimeIndex'>
    [2013-11-21 01:00:00, 2013-11-22 01:00:00]
    Length: 2, Freq: None, Timezone: Non
    
    0 讨论(0)
提交回复
热议问题