创建星期几列
- 2025-03-19 08:57:00
- admin 原创
- 50
问题描述:
使用 Python 在 Pandas 数据框中创建星期几列
我想将 csv 文件读入 pandas 数据框,将一列日期从字符串格式解析为日期对象,然后生成一个表示星期几的新列。
这就是我正在尝试的:
我想做的是这样的:
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'
解决方案 1:
Pandas 0.23+
使用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()
输出:
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+
正如用户 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
输出:
my_dates myvals day_of_week
0 2015-01-01 1 Thursday
1 2015-01-02 2 Friday
2 2015-01-03 3 Saturday
原始答案:
使用这个:
http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.Series.dt.dayofweek.html
看看这个:
获取 DataFrame 日期时间列的星期几/星期几
如果您想要一个字符串而不是整数,请执行以下操作:
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])
输出:
my_dates myvals day_of_week
0 2015-01-01 1 Thurs
1 2015-01-02 2 Fri
2 2015-01-01 3 Thurs
解决方案 2:
使用dt.day_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.day_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
另一个解决方案是assign
:
print df.assign(day_of_week = df['my_dates'].dt.day_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
解决方案 3:
df =df['Date'].dt.dayofweek
dayofweek
采用数字格式
解决方案 4:
自 起,不推荐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
解决方案 5:
如果 .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()
解决方案 6:
当日期为索引时
…仅需要前三个字母:
df['day'] = df.index.day_name().str[:3]
解决方案 7:
data['Day_Of_Week'] = pd.DatetimeIndex(data['Birth_Date']).day_name()
命令将新列/特征作为数据['Day_Of-Week']从先前存在于数据集/csv 中的数据['Birth_Date']列中附加。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD