我有一个包含group_id,seniority,join_date和quit_date列的数据框。我想提取加入日期和退出日期之间的天数。但是,我得到了NaNs。
如果我删除数据框中除退出日期和加入日期之外的所有列并再次运行相同的代码,我会得到我期望的结果。但是对于所有列,我得到了NaN。
这是我的代码:
df['join_date'] = pd.to_datetime(df['join_date'])
df['quit_date'] = pd.to_datetime(df['quit_date'])
df['days'] = df['quit_date'] - df['join_date']
df['days'] = df['days'].astype(str)
df1 = pd.DataFrame(df.days.str.split(' ').tolist(), columns = ['days', 'unwanted', 'stamp'])
df['numberdays'] = df1['days']
这就是我得到的:
days numberdays
585 days 00:00:00 NaN
340 days 00:00:00 NaN
我想在'numberdays'栏中的'days'栏中输入585。同样对于每一行。
有人可以帮我这个吗?
谢谢!
答案 0 :(得分:2)
使用dt
访问器从timedelta值中提取天数,而不是转换为字符串。
import pandas as pd
df = pd.DataFrame({'join_date': ['2014-03-24', '2013-04-29', '2014-10-13'],
'quit_date':['2015-10-30', '2014-04-04', '']})
df['join_date'] = pd.to_datetime(df['join_date'])
df['quit_date'] = pd.to_datetime(df['quit_date'])
df['days'] = df['quit_date'] - df['join_date']
df['number_of_days'] = df['days'].dt.days
@Mohammad Yusuf Ghazi指出,在使用datetime数据而不是timedelta时,dt.day
是获取天数而不是dt.days
所必需的。