我正在处理一个具有日期的文件。我想检查该文件是否包含上个月所有日子的记录。
也就是说,如果我处理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')
.....?
答案 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)
首先,您必须获取上个月的开始日期和结束日期
timedelta
获取上个月的最后一天。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