Python中截至日期的整数:timedelta days组件不支持的类型:Series

Python中截至日期的整数:timedelta days组件不支持的类型:Series,python,pandas,date,datetime,Python,Pandas,Date,Datetime,我想在dataframe事务中创建一个新的列DATE,从列DAY开始(列出从研究开始算起的天数)。比如,如果日期是1,我希望日期显示2014-1-1,或者如果日期是12,则应该是2014-1-12。这就是我将天转换为日期所做的工作: import datetime def serial_date_to_string(srl_no): new_date = datetime.datetime(2014,1,1,0,0) + datetime.timedelta(srl_no - 1)

我想在dataframe事务中创建一个新的列DATE,从列DAY开始(列出从研究开始算起的天数)。比如,如果日期是1,我希望日期显示2014-1-1,或者如果日期是12,则应该是2014-1-12。这就是我将天转换为日期所做的工作:

import datetime
def serial_date_to_string(srl_no):
    new_date = datetime.datetime(2014,1,1,0,0) + datetime.timedelta(srl_no - 1)
    return new_date.strftime("%Y-%m-%d")
但是,当我尝试使用此公式添加新列时,它不起作用:

transaction['DATE'] = serial_date_to_string(transaction['DAY'])
TypeError:timedelta-days组件的类型不受支持:Series

但是DAY列的类型是int64。我尝试在论坛上搜索,发现公式可以调整,如果我尝试使用:

def serial_date_to_string(srl_no):
    new_date = datetime.datetime(2014,1,1,0,0) + (srl_no - 1).map(datetime.timedelta)
    return new_date.strftime("%Y-%m-%d")
它仍然提供了AttributeError:“Series”对象没有属性“strftime”

谢谢你的帮助

使用
map

transaction['DATE'] = transaction['DAY'].map(serial_date_to_string)
使用
map

transaction['DATE'] = transaction['DAY'].map(serial_date_to_string)
与参数
origin
一起用于起始日,与
unit=d
一起用于

df = pd.DataFrame({'DAY':[1,12,20]})

df['date'] = pd.to_datetime(df['DAY'] - 1, origin='2014-01-01', unit='d')
print (df)
   DAY       date
0    1 2014-01-01
1   12 2014-01-12
2   20 2014-01-20
对于相同的输出,添加:

编辑:

对于您的功能,可以使用:

性能类似,
apply
这里是10k行的最快速度:

import datetime
def serial_date_to_string(srl_no):
    new_date = datetime.datetime(2014,1,1,0,0) + datetime.timedelta(srl_no - 1)
    return new_date.strftime("%Y-%m-%d")
    

np.random.seed(2021)
df = pd.DataFrame({'DAY': np.random.randint(10, 1000, size=10000)})

与参数
origin
一起用于起始日,与
unit=d
一起用于

df = pd.DataFrame({'DAY':[1,12,20]})

df['date'] = pd.to_datetime(df['DAY'] - 1, origin='2014-01-01', unit='d')
print (df)
   DAY       date
0    1 2014-01-01
1   12 2014-01-12
2   20 2014-01-20
对于相同的输出,添加:

编辑:

对于您的功能,可以使用:

性能类似,
apply
这里是10k行的最快速度:

import datetime
def serial_date_to_string(srl_no):
    new_date = datetime.datetime(2014,1,1,0,0) + datetime.timedelta(srl_no - 1)
    return new_date.strftime("%Y-%m-%d")
    

np.random.seed(2021)
df = pd.DataFrame({'DAY': np.random.randint(10, 1000, size=10000)})