pandas:通过将日期 (mm/dd/yy) 转换为工作日来创建 'Weekday' DataFrame 列
pandas: Create a 'Weekday' DataFrame column by converting date (mm/dd/yy) to weekday
我正在尝试将日期转换为工作日 - 至少是工作日数字,0 表示星期一,1 表示星期二等。日期是对象数据类型。
当我试图找到 information/help 将日期转换为工作日,或者添加一个名为 'weekday' 的新数据框列并进行转换时,我在 [=27 上找不到任何内容=]
我发现了这个:
data.loc[:,'weekday'] = data.index.weekday
但它似乎不起作用,因为我收到此错误:
AttributeError: 'Int64Index' object has no attribute 'weekday'
没有容易找到的例子。有人可以帮忙吗?
不确定您的数据结构,但如果将它们转换为日期时间,这应该可行:
import pandas as pd
df = pd.DataFrame({'date': ['2014/06/01', '2014/01/01', '2014/08/01','2014/09/01','2014/10/01']})
df = pd.to_datetime(df['date'])
df_weekdays = df.dt.dayofweek
这是一个使用 pandas 创建日历类型表示的示例,将帮助您处理 pandas 中的日期:
Output would look like this:
Code
import pandas as pd
cal = pd.DataFrame(pd.date_range('2016-01-01','2016-01-31'),columns=['DATE'])
#Refer to https://docs.python.org/2/library/time.html for detailed list of format specifiers
cal['DAY'] = cal.DATE.dt.strftime('%a')
cal['day'] = cal.DATE.dt.dayofweek
cal['WEEK'] = cal.DATE.dt.week
cal['DT'] = cal.DATE.dt.day
cal.loc[cal['WEEK'] > 52, 'WEEK'] = 0
cal.set_index('WEEK',inplace=True)
calg = cal.groupby(['day','DAY']).apply(lambda x: x.DT)
calg.unstack(level=[0,1])
Output
day 0 1 2 3 4 5 6
DAY Mon Tue Wed Thu Fri Sat Sun
WEEK
0 NaN NaN NaN NaN 1 2 3
1 4 5 6 7 8 9 10
2 11 12 13 14 15 16 17
3 18 19 20 21 22 23 24
4 25 26 27 28 29 30 31
查看提供的代码片段和错误消息可以看出您正试图从 integer 索引中提取工作日,这很困难。 ;)
Abbas 和 Tasos 已经展示了如何使用适当的数据类型(类似日期时间的类型)来做到这一点
PS 对未来的一个提示:提问时总是尝试提供 Minimal, Complete, and Verifiable example。如果遇到 pandas 问题,请提供示例 input 和 output 数据集(5- CSV/dict/JSON/Python 代码格式 as text 中的 7 行,因此可以在为您编写答案时使用它)。
这将有助于避免以下情况:"your code isn't working for me" 或 "it doesn't work with my data"。等等
我正在尝试将日期转换为工作日 - 至少是工作日数字,0 表示星期一,1 表示星期二等。日期是对象数据类型。
当我试图找到 information/help 将日期转换为工作日,或者添加一个名为 'weekday' 的新数据框列并进行转换时,我在 [=27 上找不到任何内容=]
我发现了这个:
data.loc[:,'weekday'] = data.index.weekday
但它似乎不起作用,因为我收到此错误:
AttributeError: 'Int64Index' object has no attribute 'weekday'
没有容易找到的例子。有人可以帮忙吗?
不确定您的数据结构,但如果将它们转换为日期时间,这应该可行:
import pandas as pd
df = pd.DataFrame({'date': ['2014/06/01', '2014/01/01', '2014/08/01','2014/09/01','2014/10/01']})
df = pd.to_datetime(df['date'])
df_weekdays = df.dt.dayofweek
这是一个使用 pandas 创建日历类型表示的示例,将帮助您处理 pandas 中的日期:
Output would look like this:
Code
import pandas as pd
cal = pd.DataFrame(pd.date_range('2016-01-01','2016-01-31'),columns=['DATE'])
#Refer to https://docs.python.org/2/library/time.html for detailed list of format specifiers
cal['DAY'] = cal.DATE.dt.strftime('%a')
cal['day'] = cal.DATE.dt.dayofweek
cal['WEEK'] = cal.DATE.dt.week
cal['DT'] = cal.DATE.dt.day
cal.loc[cal['WEEK'] > 52, 'WEEK'] = 0
cal.set_index('WEEK',inplace=True)
calg = cal.groupby(['day','DAY']).apply(lambda x: x.DT)
calg.unstack(level=[0,1])
Output
day 0 1 2 3 4 5 6
DAY Mon Tue Wed Thu Fri Sat Sun
WEEK
0 NaN NaN NaN NaN 1 2 3
1 4 5 6 7 8 9 10
2 11 12 13 14 15 16 17
3 18 19 20 21 22 23 24
4 25 26 27 28 29 30 31
查看提供的代码片段和错误消息可以看出您正试图从 integer 索引中提取工作日,这很困难。 ;)
Abbas 和 Tasos 已经展示了如何使用适当的数据类型(类似日期时间的类型)来做到这一点
PS 对未来的一个提示:提问时总是尝试提供 Minimal, Complete, and Verifiable example。如果遇到 pandas 问题,请提供示例 input 和 output 数据集(5- CSV/dict/JSON/Python 代码格式 as text 中的 7 行,因此可以在为您编写答案时使用它)。
这将有助于避免以下情况:"your code isn't working for me" 或 "it doesn't work with my data"。等等