使用 Python 在 Pandas 数据框中创建星期几列

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/30222533/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 08:05:30  来源:igfitidea点击:

Create a day-of-week column in a Pandas dataframe using Python

pythondatetimepandas

提问by James Eaves

Create a day-of-week column in a Pandas dataframe using Python

使用 Python 在 Pandas 数据框中创建星期几列

I'd like to read a csv file into a pandas dataframe, parse a column of dates from string format to a date object, and then generate a new column that indicates the day of the week.

我想将一个 csv 文件读入一个 Pandas 数据帧,将一列日期从字符串格式解析为一个日期对象,然后生成一个指示星期几的新列。

This is what I'm trying:

这就是我正在尝试的:

What I'd like to do is something like:

我想做的是:

import pandas as pd

import csv

df = pd.read_csv('data.csv', parse_dates=['date']))

df['day-of-week'] = df['date'].weekday()


AttributeError: 'Series' object has no attribute 'weekday'


Thank you for your help. James

感谢您的帮助。詹姆士

采纳答案by Liam Foley

Pandas 0.23+

熊猫 0.23+

Use pandas.Series.dt.day_name(), since pandas.Timestamp.weekday_namehas been deprecated:

使用pandas.Series.dt.day_name(),因为pandas.Timestamp.weekday_name已被弃用:

import pandas as pd


df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])

df['day_of_week'] = df['my_dates'].dt.day_name()

Output:

输出:

    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

Pandas 0.18.1+

熊猫 0.18.1+

As user jezrael points out below, dt.weekday_namewas added in version 0.18.1 Pandas Docs

正如用户 jezrael 在下面指出的那样,dt.weekday_name已在 0.18.1 Pandas Docs版本中添加

import pandas as pd

df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])
df['day_of_week'] = df['my_dates'].dt.weekday_name

Output:

输出:

    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

Original Answer:

原答案:

Use this:

用这个:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.dayofweek.html

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.dayofweek.html

See this:

看到这个:

Get weekday/day-of-week for Datetime column of DataFrame

获取 DataFrame 的日期时间列的工作日/星期几

If you want a string instead of an integer do something like this:

如果你想要一个字符串而不是一个整数,请执行以下操作:

import pandas as pd

df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])
df['day_of_week'] = df['my_dates'].dt.dayofweek

days = {0:'Mon',1:'Tues',2:'Weds',3:'Thurs',4:'Fri',5:'Sat',6:'Sun'}

df['day_of_week'] = df['day_of_week'].apply(lambda x: days[x])

Output:

输出:

    my_dates  myvals day_of_week
0 2015-01-01       1       Thurs
1 2015-01-02       2         Fri
2 2015-01-01       3       Thurs

回答by jezrael

In version 0.18.1is added dt.weekday_name:

在版本0.18.1中添加dt.weekday_name

print df
    my_dates  myvals
0 2015-01-01       1
1 2015-01-02       2
2 2015-01-03       3

print df.dtypes
my_dates    datetime64[ns]
myvals               int64
dtype: object

df['day_of_week'] = df['my_dates'].dt.weekday_name
print df
    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

Another solution with assign:

另一个解决方案assign

print df.assign(day_of_week = df['my_dates'].dt.weekday_name)
    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

回答by user3483203

Using dt.weekday_nameis deprecated since pandas 0.23.0, instead, use dt.day_name():

使用dt.weekday_name因为过时pandas 0.23.0,相反,使用dt.day_name()

df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])

df['my_dates'].dt.day_name()

0    Thursday
1      Friday
2    Saturday
Name: my_dates, dtype: object

回答by Catruc Iurie

df =df['Date'].dt.dayofweek

dayofweekis in numeric format

dayofweek是数字格式

回答by Pinkmei

Just in case if .dt doesn't work for you. Trying .DatetimeIndex might help. Hope the code and our test result here help you fix it. Regards,

以防万一 .dt 对您不起作用。尝试 .DatetimeIndex 可能会有所帮助。希望这里的代码和我们的测试结果可以帮助您修复它。问候,

import pandas as pd
import datetime

df = pd.DataFrame({'Date':['2015-01-01','2015-01-02','2015-01-03'],'Number':[1,2,3]})

df['Day'] = pd.DatetimeIndex(df['Date']).day_name() # week day name
df.head()

enter image description here

在此处输入图片说明