【问题标题】:Addition of days to all the date columns in pandas using for loop使用 for 循环将天数添加到 pandas 中的所有日期列
【发布时间】:2020-09-02 11:20:11
【问题描述】:

我有一个dataframe 的日期字符串,它是大data framesubset。这个dataframe 的前5 个rows

dates_df = pd.DataFrame(
    {'date1':['2020-06-16','2020-06-16','2020-06-17','2020-06-21','2020-06-11'],
     'date2':['2020-06-10','2020-06-10','2020-06-10','2020-06-10','2020-06-10'],
     'date3':['2018-12-20','2018-12-19','2019-09-20','2019-05-08','2020-06-13'],
     'date4':['2020-07-07','2020-06-30','2020-07-01','2020-07-03','2020-07-24']})

我有declared 一个variablenew_date='2020-06-29'

Define a variable 调用diff_date 使得diff_date=new_date-dates_df['date2'] 然后这个diff_date 应该添加到每个date column 中的所有date values 中,这应该是我的final_df。 到目前为止,我采取的步骤是将这些值转换为 pd.to_datetime() 并且也有所不同。给出给定答案的最终df。 ############################ 对上面的数据框稍作修改,写了一个这样的函数。

dates_df=pd.DataFrame(
 {'date1':['2020-06-16','2020-06-16','2020-06-17','2020-06-21','2020-06-    
 11'],'date2':['2020-06-10','2020-08-10','2020-06-10','2020-09-13','2020-06- 
 10'],'date3':['2018-12-20','2018-12-19','2019-09-20','2019-05-08','2020-06- 
 13'],'date4':['2020-07-07','2020-06-30','2020-07-01','2020-07-03','2020-07- 
 24']}) 

def datechange_func(dataset,variablelist,new_run_date,temp_run_date=None):
   dataset[variablelist]=dataset[variablelist].apply(pd.to_datetime)
   li= list(dataset['date2'].unique())
   if dataset.loc[dataset['date2'].any().isin(li)]:
       dataset['date2'] = max(li)
   else:
       dataset['date2'] = temp_run_date

   diff = new_run_date - dataset['date2']

   dataset[variablelist]=dataset[variablelist].add(diff,axis=0)

   return dataset

variablelist1=['date1', 'date2', 'date3', 'date4'] final_df=datechange_func(dates_df,variablelist1,new_run_date,temp_run_date=None)

应该update dates_df['date2'] 得到maximum unique valuedate2 column 的所有行中 但我得到这个错误 TypeError: invalid_op() got an unexpected keyword argument 'skipna' 如何解决这个问题?

【问题讨论】:

    标签: python pandas date


    【解决方案1】:

    使用pd.to_datetime 将日期类列转换为pandas 日期时间序列,然后使用DataFrame.addaxis=0diff 添加到数据框:

    dates_df = dates_df.apply(pd.to_datetime)
    diff = pd.Timestamp('2020-06-29') - dates_df['date2']
    final_df = dates_df.add(diff, axis=0)
    

    结果:

    print(final_df)
          date1      date2      date3      date4
    0 2020-07-05 2020-06-29 2019-01-08 2020-07-26
    1 2020-07-05 2020-06-29 2019-01-07 2020-07-19
    2 2020-07-06 2020-06-29 2019-10-09 2020-07-20
    3 2020-07-10 2020-06-29 2019-05-27 2020-07-22
    4 2020-06-30 2020-06-29 2020-07-02 2020-08-12
    

    【讨论】:

    • @Shubham Sharma 你的回答很有用。我已经修改了上述问题,将a function to update dates_df['date2'] column 写入所有maximum unique valuedate2 column values 但我遇到了错误。你能帮我解决这个问题吗
    • @ruby 让我们讨论here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多