将列设置为一种日期格式Pandas

gstyhher  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在筛选出上个月的数据记录,但是在执行

emp_df = emp_df[emp_df['Date'].dt.month == (currentMonth-1)]

忽略某些记录(将某些记录按月处理)。Link to File

from datetime import datetime, date
import pandas as pd
import numpy as np

cholareport = pd.read_excel("D:/Automations/HealthCheck and Audit Trail/report.xlsx")
uniqueemp = set(cholareport['Email'])
cholareport['Date'] = pd.to_datetime(cholareport['Date'])

uniqueemp = set(cholareport['Email'])
daystoignore = ['Holiday_COE', 'Leave_COE']
# datedfforemp = pd.DataFrame(columns=uniqueemp)
cholareport['Date'] = cholareport['Date'].apply(lambda x: 
pd.to_datetime(x).strftime('%d/%m/%Y'))
cholareport["Date"] = pd.to_datetime(cholareport["Date"], utc=True)

for emp in uniqueemp:
    emp_df = cholareport[cholareport['Email'].isin([emp])]
    emp_df = emp_df[~emp_df['Task: Task Name'].isin(daystoignore)]
    # s1 = pd.to_datetime(emp_df['Date']).dt.strftime('%Y-%m')
    # s2 = (pd.to_datetime('today').strftime('%Y-%m') -pd.DateOffset(months=1)).strftime('%Y-%m')
    # emp_df = emp_df[s1 == s2]
    currentMonth = datetime.now().month
    # print(currentMonth)
    # print(emp_df['Date'])
    emp_df['Date'] = pd.to_datetime(emp_df['Date']).dt.strftime("%dd-%mm-%YYYY")
    format_data = "%dd-%mm-%YYYY"
    empdfdate = []
    for i in emp_df['Date']:
        empdfdate.append(datetime.strptime(i,format_data))
    print(empdfdate)
    emp_df['Date'] = empdfdate
    for i in emp_df['Date']:
        print(i.month, i.day)

    # emp_df['Date'] = pd.to_datetime(emp_df['Date']).dt.strftime('%Y-%m')
    emp_df = emp_df[emp_df['Date'].dt.month == (currentMonth-1)]
    
    for i in emp_df['Date']:
        print(i.month, i.day)

结果:
6个10个
7个10个
10个10
十一10
12个10
10个13个
10个14个
预期值:6 10
7个10个
10个10
十一10
12个10
十三10
14个10

axr492tv

axr492tv1#

我不太清楚你想做什么。如果我理解正确的话,你只是想统计过去一个月每天的条目数。在这种情况下,你可以简单地做下面的事情。

from datetime import datetime

import pandas as pd

report = pd.read_excel('report.xlsx')

print('day: counts', report.Date[report.Date.dt.month == datetime.now().month - 1].dt.day.value_counts(), sep='\n')

我没有得到你期望的结果。这可能是你也想以某种方式过滤电子邮件;但是,我无法从您代码中理解您想要做什么。
输出量:

day: counts
3     101
5     101
6     101
7     101
4     101
24     84
28     84
27     84
26     84
25     84
10     82
11     82
12     82
13     82
14     82
17     67
21     67
20     67
19     67
18     67
31      2
Name: Date, dtype: int64

相关问题