Python中截至日期的整数:timedelta days组件不支持的类型:Series
我想在dataframe事务中创建一个新的列DATE,从列DAY开始(列出从研究开始算起的天数)。比如,如果日期是1,我希望日期显示2014-1-1,或者如果日期是12,则应该是2014-1-12。这就是我将天转换为日期所做的工作: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)
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)})