KeyError:“ Dayofweek”

时间:2019-06-12 14:33:34

标签: python-3.x pandas

似乎fastai库在Python上不起作用。但是,我尝试使用以下代码行添加功能,其目标是确定给定日期是否为

Monday/Friday or Tuesday/Wednesday/Thursday. 

代码如下

    data['mon_fri'] = 0
    for i in range(0,len(data)):
    if (data['Dayofweek'][i] == 0 or data['Dayofweek'][i] == 4):
    data['mon_fri'][i] = 1
    else:
    data['mon_fri'][i] = 0

我跑步时出现以下错误-

  

KeyError:'Dayofweek'

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

假设您使用的是熊猫,您可以使用内置的dayofweek函数

In [32]: d = pd.date_range('2016-12-31', '2017-01-08', freq='D').to_series()

In [33]: d
Out[33]:
2016-12-31   2016-12-31
2017-01-01   2017-01-01
2017-01-02   2017-01-02
2017-01-03   2017-01-03
2017-01-04   2017-01-04
2017-01-05   2017-01-05
2017-01-06   2017-01-06
2017-01-07   2017-01-07
2017-01-08   2017-01-08
Freq: D, dtype: datetime64[ns]

In [34]: s = (d.dt.dayofweek==1) |(d.dt.dayofweek==4)

In [35]: s
Out[35]:
2016-12-31    False
2017-01-01    False
2017-01-02    False
2017-01-03     True
2017-01-04    False
2017-01-05    False
2017-01-06     True
2017-01-07    False
2017-01-08    False
Freq: D, dtype: bool

然后只需通过

转换为1/0
In [39]: t = s.apply(lambda x: int(x==True))
In [40]: t
Out[40]:
2016-12-31    0
2017-01-01    0
2017-01-02    0
2017-01-03    1
2017-01-04    0
2017-01-05    0
2017-01-06    1
2017-01-07    0
2017-01-08    0
Freq: D, dtype: int64

答案 1 :(得分:0)

显示整个数据框的新答案。

In [51]: df = pd.DataFrame({'col1':range(9)})

In [52]: df['d'] = pd.date_range('2016-12-31','2017-01-08',freq='D')

In [53]: df
Out[53]:
   col1          d
0     0 2016-12-31
1     1 2017-01-01
2     2 2017-01-02
3     3 2017-01-03
4     4 2017-01-04
5     5 2017-01-05
6     6 2017-01-06
7     7 2017-01-07
8     8 2017-01-08

现在添加星期几的列

In [54]: df['dow'] = df['d'].dt.dayofweek

In [55]: df
Out[55]:
   col1          d  dow
0     0 2016-12-31    5
1     1 2017-01-01    6
2     2 2017-01-02    0
3     3 2017-01-03    1
4     4 2017-01-04    2
5     5 2017-01-05    3
6     6 2017-01-06    4
7     7 2017-01-07    5
8     8 2017-01-08    6

最后进行计算,M / Th为1,其他日子为0

In [56]: df['feature'] = df['dow'].apply(lambda x: int((x==1) or (x==4)))

In [57]: df
Out[57]:
   col1          d  dow  feature
0     0 2016-12-31    5        0
1     1 2017-01-01    6        0
2     2 2017-01-02    0        0
3     3 2017-01-03    1        1
4     4 2017-01-04    2        0
5     5 2017-01-05    3        0
6     6 2017-01-06    4        1
7     7 2017-01-07    5        0
8     8 2017-01-08    6        0