在Python中,我创建了一个具有4个参数的函数(2个强制性2个可选)
def combineDateTime(dateInput, timeInput, dateInputFormat='%Y-%m-%d', timeInputFormat='%H:%M:%S'):
.....
我想通过调用函数并向其传递现有数据框列中2个值来在数据框上创建新列,但是我无法理解传递所需列所需要的语法。
该函数测试传递的值的类型(例如str,int等),并根据它执行不同的操作,但是我认为问题在于它被传递了一系列,因此逻辑不起作用。
谁能建议我该怎么称呼它。我正在尝试使用.apply功能。
df_scd2_pd['NewColumn'] = df_scd2_pd[[col_EffFromDT,col_EffFromTM]].apply(combineDateTime, axis=1)
非常感谢
答案 0 :(得分:1)
一种方法是将列(作为Series)传递给您的函数(假设它可以与Series一起用作前两个输入参数):
df = pd.DataFrame({
'col_EffFromDT': ['2019-03-21'],
'col_EffFromTM': ['12:34:56'],
})
def combineDateTime(dateInput, timeInput, dateInputFormat='%Y-%m-%d', timeInputFormat='%H:%M:%S'):
return pd.to_datetime(dateInput + ' ' + timeInput, format=' '.join([dateInputFormat, timeInputFormat]))
df['NewColumn'] = combineDateTime(df['col_EffFromDT'], df['col_EffFromTM'])
print(df)
输出:
col_EffFromDT col_EffFromTM NewColumn
0 2019-03-21 12:34:56 2019-03-21 12:34:56
请注意:如果您调用.apply(f, axis=1)
,则会将每一行作为Series传递给函数f
,因此您的函数将使用一个参数而不是最少需要两个参数来调用。