Python 使用for循环向所有日期列添加日期
我有一个日期字符串的Python 使用for循环向所有日期列添加日期,python,pandas,date,Python,Pandas,Date,我有一个日期字符串的dataframe,它是大dataframe的子集 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',
dataframe
,它是大dataframe
的子集
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']})
我已经声明了一个名为new\u date='2020-06-29'
定义一个名为diff_date
的变量,以便diff_date=new_date-dates\u df['date2']
然后该diff_date
应添加到每个date列中的所有date值中,该列应为我的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\u df=datechange\u func(日期、变量列表1、新运行日期、临时运行日期=None)
它应该updatedates\u df['date2']
以在date2列的所有行中获得最大唯一值
但是我得到了这个错误
TypeError:invalid_op()获取了意外的关键字参数“skipna”
如何纠正此问题?使用pd。要将类似日期的列转换为日期时间序列,请使用DataFrame。沿axis=0添加diff
将
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
你的答案很有用。我修改了上述问题,编写了一个函数来更新dates_df['date2']列
,使所有date2列值中的最大唯一值
,但我得到了错误。你能帮我做点什么吗this@ruby让我们讨论一下