[英]Retrieving weekday name from an integer in a Python dataframe
I would like to convert a column of a dataframe containing weekday integers into its corresponding weekday name.我想将包含工作日整数的 dataframe 的列转换为其相应的工作日名称。 So 0 should become Monday, 1 Tuesday and so forth.
所以 0 应该变成星期一,1 星期二等等。
I have tried to convert the integers into a datetime format but it does not work.我试图将整数转换为日期时间格式,但它不起作用。 What is the best way to go about it?
go 最好的方法是什么?
data = {'weekday_number': [1, 2, 0, 3, 4, 5, 6, 3, 2, 5, 4, 5]}
df = pd.DataFrame(data)
df['weekday_name'] = pd.to_datetime(df['weekday_number']).dt.strftime('%A')
You can use date
objects to do the conversion, by using your weekday number as a timedelta
from a date which is a Monday:您可以使用
date
对象进行转换,方法是使用您的工作日编号作为timedelta
日期的时间增量:
import pandas as pd
from datetime import date, timedelta
data = {'weekday_number': [1, 2, 0, 3, 4, 5, 6, 3, 2, 5, 4, 5]}
df = pd.DataFrame(data)
df['weekday_name'] = df['weekday_number'].apply(lambda w:(date(2021, 2, 1) + timedelta(days = w)).strftime('%A'))
print(df)
Output Output
weekday_number weekday_name
0 1 Tuesday
1 2 Wednesday
2 0 Monday
3 3 Thursday
4 4 Friday
5 5 Saturday
6 6 Sunday
7 3 Thursday
8 2 Wednesday
9 5 Saturday
10 4 Friday
11 5 Saturday
You can also use the day_name
array from calendar
:您还可以使用
calendar
中的day_name
数组:
from calendar import day_name
df['weekday_name'] = df['weekday_number'].apply(lambda w:day_name[w])
Or using map
with day_name
, converting the array into a dict:或者使用
map
和day_name
,将数组转换为字典:
df['weekday_name'] = df['weekday_number'].map(dict(enumerate(day_name)))
The results are the same as shown above.结果与上图相同。
Without a library, you would be best of programming it on a case-by-case basis:如果没有库,您最好根据具体情况对其进行编程:
for i in range(len(array)):
if(array[i] == 0):
array[i] = "Monday"
elif(array[i] == 1):
array[i] = "Tuesday"
...
You can also use the calendar module.您还可以使用日历模块。
import calendar
for i in range(len(array)):
array[i] = calendar.day_name[array[i]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.