Python Dataframe datetime列作为函数的参数

Python Dataframe datetime列作为函数的参数,python,pandas,datetime,dataframe,Python,Pandas,Datetime,Dataframe,将数据帧的多列作为参数传递给函数时,datetime列不希望执行下面的格式化函数。我可以管理显示的内联解决方案。。。但知道原因会很好。。。我是否应该使用不同的日期,如数据类型?谢谢(p.s.熊猫=很棒) 将熊猫作为pd导入 将numpy作为np导入 将日期时间导入为dt def fmtfn(参数dttm,参数int): retstr=arg_dttm.strftime(':%Y-%m-%d')+'{:0>3}'。格式(arg_int) #带有“numpy.datetime64”对象的炸弹没有属性

将数据帧的多列作为参数传递给函数时,datetime列不希望执行下面的格式化函数。我可以管理显示的内联解决方案。。。但知道原因会很好。。。我是否应该使用不同的日期,如数据类型?谢谢(p.s.熊猫=很棒)

将熊猫作为pd导入
将numpy作为np导入
将日期时间导入为dt
def fmtfn(参数dttm,参数int):
retstr=arg_dttm.strftime(':%Y-%m-%d')+'{:0>3}'。格式(arg_int)
#带有“numpy.datetime64”对象的炸弹没有属性“strftime”
#retstr='{:%Y-%m-%d}~{:0>3}'。格式(arg_dttm,arg_int)
#炸弹:无效的格式说明符
返回retstr
def fmtfn2(参数dtstr,参数int):
retstr='{}~{:0>3}'。格式(arg_dtstr,arg_int)
返回retstr
#源数据。
#我想添加第三列newhg,其中包含例如2017-06-25~066
#即,其他两列的串联。
df1=pd.数据帧({'mydt':['2017-05-07','2017-06-25','2015-08-25'],
‘myint’:[66201100]})
df1['mydt']=pd.to_datetime(df1['mydt'],errors='raise')
#这可以工作(不调用函数)
打印(“\nLine解决方案”)
df1['newhg']=df1['mydt','myint']]。应用(lambda x:'{:%Y-%m-%d}{:0>3})。格式(x[0],x[1]),轴=1)
打印(df1)
#这很有效
打印(“\n先转换为字符串”)
df1['mydt2']=df1['mydt']。应用(lambda x:x.strftime(“%Y-%m-%d”))
df1['newhg']=np.vectorize(fmtfn2)(df1['mydt2'],df1['myint']))
打印(df1)
#功能中的炸弹-见上文
打印('\n通过日期时间')
df1['newhg']=np.vectorize(fmtfn)(df1['mydt'],df1['myint']))
打印(df1)

您还可以使用pandas的内置功能,这使其更易于阅读:

df1['newhg'] = df1.mydt.dt.strftime('%Y-%m-%d') +  '~' + df1.myint.astype(str).str.zfill(3)

调用函数导致错误的代码在哪里?@cᴏʟᴅsᴘᴇᴇᴅ 在代码末尾向下滚动。谢谢,你的是最优雅的解决方案。。。我将浏览更多关于“使用dataframe列调用函数”的内容,因为我对它感兴趣。