在熊猫的一列中模拟''(单引号)?

时间:2019-05-15 06:38:53

标签: python python-3.x pandas

我需要将日期传递到函数func中。

该参数采用dd-mm-yyyy的形式,当我使用'15-05-2019'作为参数时可以使用。

如何编写代码以接受Pandas列中的日期?

在我的情况下,我将所有日期存储在dates列中,我希望有一种可以循环使用的方式,而不是对所有日期单独应用滴答声。

对于我的问题有一些背景知识:

df['day'] = df.apply(lambda row: func('15-05-2019'), axis=1) 起作用,给了我一个显示日期的熊猫列。

如何使用我的dates列针对所有行自动执行此操作?

样本数据:

Table displaying dummy data with columns for 'dates' and 'day'

函数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"

2 个答案:

答案 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]))