简体   繁体   English

从 Python dataframe 中的 integer 检索工作日名称

[英]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')

Use map for that.为此使用map First, create a dictionary for mapping days with their numbers首先,创建一个字典来映射日期和他们的数字

days = {0:'Monday', 1:'Tuesday', 2:'Wednesday', 3:'Thursday', 4:'Friday', 5:'Saturday', 6:'Sunday'}

then然后

df['weekday_name'] = df['weekday_number'].map(days)

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:或者使用mapday_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM