我需要将日期传递到函数func
中。
该参数采用dd-mm-yyyy
的形式,当我使用'15-05-2019'
作为参数时可以使用。
如何编写代码以接受Pandas列中的日期?
在我的情况下,我将所有日期存储在dates
列中,我希望有一种可以循环使用的方式,而不是对所有日期单独应用滴答声。
对于我的问题有一些背景知识:
df['day'] = df.apply(lambda row: func('15-05-2019'), axis=1)
起作用,给了我一个显示日期的熊猫列。
如何使用我的dates
列针对所有行自动执行此操作?
样本数据:
函数func
:
def func(date):
date = str(date)
d = date[0:2]
m = date[3:5]
y = date[6:]
day = dayofweek(int(d), int(m), int(y))
return day
虽然可能不需要,但这是辅助功能。
def dayofweek(d, m, y):
t = [ 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 ]
y -= m < 3
day = (( y + int(y / 4) - int(y / 100) + int(y / 400) + t[m - 1] + d) % 7)
if day == 1:
return "Monday"
if day == 2:
return "Tuesday"
if day == 3:
return "Wednesday"
if day == 4:
return "Thursday"
if day == 5:
return "Friday"
if day == 6:
return "Saturday"
if day == 7:
return "Sunday"
答案 0 :(得分:3)
使用Series.apply
:
df['day'] = df['dates'].apply(func)
编辑:您可以将值转换为日期时间,然后调用Series.dt.day_name
,如果可能的话,还需要一些非日期时间,请添加参数errors=coerce
以将其转换为NaT
:
rng = pd.date_range('2017-04-03', periods=10).tolist() + [10]
df = pd.DataFrame({'dates': rng})
df['dates'] = pd.to_datetime(df['dates'], errors='coerce')
df['day'] = df['dates'].dt.day_name()
print (df)
dates day
0 2017-04-03 Monday
1 2017-04-04 Tuesday
2 2017-04-05 Wednesday
3 2017-04-06 Thursday
4 2017-04-07 Friday
5 2017-04-08 Saturday
6 2017-04-09 Sunday
7 2017-04-10 Monday
8 2017-04-11 Tuesday
9 2017-04-12 Wednesday
10 NaT NaN
答案 1 :(得分:1)
在某些情况下,map
也可以工作:
df['day'] = df['dates'].map(lambda x: func(list(map(int,x.split('-')))[0], list(map(int,x.split('-')))[1], list(map(int,x.split('-')))[2]))