如何检查日期列是否属于特定月份的熊猫?

时间:2019-10-10 01:00:55

标签: python pandas

我正在处理一个具有日期的文件。我想检查该文件是否包含上个月所有日子的记录。

也就是说,如果我处理9月文件, 我想知道9月1日至9月30日包含哪些行。 查看上个月的数据。不适用于本月。 我如何在熊猫里做到这一点?

    def is_delivery_ready_to_process():

        dateCols = ['Document Date']
        data = pd.read_excel(os.path.join(file_path, f), parse_dates=dateCols,
                                   dayfirst=True, sheet_name='Refined')
.....?

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,是否要过滤特定月份内的行?

首先将您的日期字符串转换为datetime对象,然后进行过滤:

import pandas as pd
from datetime import datetime


d = {'date': ["Sep 1 2005", "Sep 1 2005", "Nov 1 2005", "Dec 1 2005", "Apr 1 2005",  "Aug 1 2005", "Aug 1 2005"], 'group': ["A", "A", "B", "B", "C", "C", "C"], "value": [5, 6, 7, 8, 9, 10, 11]}

df = pd.DataFrame(data= d)
df["datetime"] = pd.to_datetime(df['date'], format='%b %d %Y')

startdate = datetime(2005, 9, 1)
enddate = datetime(2005, 10, 1)

df[(df.datetime >= startdate) & (df.datetime < enddate)]

输出:

   date       group value   datetime
0   Sep 1 2005  A   5   2005-09-01
1   Sep 1 2005  A   6   2005-09-01

答案 1 :(得分:0)

首先,您必须获取上个月的开始日期和结束日期

  1. 今天找到。
  2. 使用它来查找本月的第一天。
  3. 使用timedelta获取上个月的最后一天。
  4. 使用replace(day=1)获取上个月的第一天
import datetime

today = datetime.date.today()
previous_month_end = today.replace(day=1) - datetime.timedelta(days=1)
previous_month_start = previous_month_end.replace(day=1)
print(previous_month_start) # 2019-09-01
print(previous_month_end) # 2019-09-30

接下来,例如,使用boolean mask选择两个日期之间的数据框行

import pandas as pd
df = pd.DataFrame(columns=['Document Date'],
                  data=[datetime.date(2019, 10, 1),
                        datetime.date(2019, 9, 1),
                        datetime.date(2019, 9, 3)])

df.loc[(df['Document Date'] >= previous_month_start) & (df['Document Date'] <= previous_month_end)]

给你

  Document Date
1    2019-09-01
2    2019-09-03