使用 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
Create a day-of-week column in a Pandas dataframe using Python
提问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_name
has 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_name
was 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
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.1
is 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_name
is 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
dayofweek
is 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()