首页 > 解决方案 > 将 dataFrame 与日期格式进行比较时的问题

问题描述

我有一系列由列组成的数据,我想提取“dateRep”在一个日期“x”之前的行

x= datetime.datetime(2020,3,25)
save_df=df[(df["countriesAndTerritories"]=="Algeria") & (to_datetime(df["dateRep"])> x)]

但我总是遇到一些不如“X”的约会对象 在此处输入图像描述

在此处输入图像描述

177 06/04/2020  6   4   2020    69  22  Algeria DZ  DZA 42228429.0  Africa
178 05/04/2020  5   4   2020    80  25  Algeria DZ  DZA 42228429.0  Africa
179 04/04/2020  4   4   2020    185 42  Algeria DZ  DZA 42228429.0  Africa
183 31/03/2020  31  3   2020    73  4   Algeria DZ  DZA 42228429.0  Africa
184 30/03/2020  30  3   2020    57  2   Algeria DZ  DZA 42228429.0  Africa
185 29/03/2020  29  3   2020    45  3   Algeria DZ  DZA 42228429.0  Africa
186 28/03/2020  28  3   2020    42  1   Algeria DZ  DZA 42228429.0  Africa
187 27/03/2020  27  3   2020    65  4   Algeria DZ  DZA 42228429.0  Africa
188 26/03/2020  26  3   2020    38  2   Algeria DZ  DZA 42228429.0  Africa
202 12/03/2020  12  3   2020    0   0   Algeria DZ  DZA 42228429.0  Africa
203 09/03/2020  9   3   2020    3   0   Algeria DZ  DZA 42228429.0  Africa
204 06/03/2020  6   3   2020    5   0   Algeria DZ  DZA 42228429.0  Africa
205 05/03/2020  5   3   2020    7   0   Algeria DZ  DZA 42228429.0  Africa
206 04/03/2020  4   3   2020    2   0   Algeria DZ  DZA 42228429.0  Africa
226 12/02/2020  12  2   2020    0   0   Algeria DZ  DZA 42228429.0  Africa

标签: pythonpandasdatedatetimecompare

解决方案


默认情况下,pd.to_datetime会将字符串解释和解析04/03/2020为月/日/年(参见文档)。但是,在您的情况下,您似乎将日/月/年作为输入格式,因此您需要将dayfirst关键字设置为True. 例子:

from datetime import datetime
import pandas as pd

x = datetime(2020, 3, 25)

df = pd.DataFrame({'dateRep': ['04/03/2020', '01/04/2020', '13/06/2019', '05/04/2020'],
                   'countriesAndTerritories': ['Algeria', 'Algeria', 'tmp', 'tmp'],
                   'v': [0, 1, 0, 0]})

df[(df["countriesAndTerritories"]=="Algeria") & (pd.to_datetime(df["dateRep"], dayfirst=True) > x)]

#       dateRep countriesAndTerritories  v
# 1  01/04/2020                 Algeria  1

如果省略关键字,结果将无效:

df[(df["countriesAndTerritories"]=="Algeria") & (pd.to_datetime(df["dateRep"]) > x)]
#       dateRep countriesAndTerritories  v
# 0  04/03/2020                 Algeria  0

最后说明:如果您想安全,请明确指定日期(时间)字符串的格式,例如在pd.to_datetime(df["dateRep"], format="%d/%m/%Y").


推荐阅读