如何在熊猫数据框中比较日期时间

时间:2020-07-16 19:12:56

标签: python pandas numpy

我得到了三列带有日期信息的列,它们指示需要按特定顺序发生的事件,我想检查数据框中是否有任何行的顺序不正确。

我用pd.to_datetime()

准备了每一列

让我们说规则应该是列a < b < c,所以我尝试了:

count = 0
for idx, _ in df.iterrows():
    if df.loc[idx, 'a'] > df.loc[idx, 'b']:
        print(f"Invalid b in line {idx}")
        print(f"{df.loc[idx, 'a']} {df.loc[idx, 'b']}")
        drop_rows.append(idx)
        count+=1
    if df.loc[idx, 'b'] > df.loc[idx, 'c']:
        print(f"Invalid c in line {idx}") 
        drop_rows.append(idx)
        count+=1
print(f"{count} invalid rows")

它几乎适用于所有行,但对于36个(正确)行,我仍然收到类似以下的内容

Invalid b in line 5883 2014-03-06 00:00:00 2014-03-06 00:00:00
Invalid b in line 24442 2011-11-14 00:00:00 2011-11-14 00:00:00

我也将if df.loc[idx, 'a'] > df.loc[idx, 'b']:更改为if not df.loc[idx, 'a'] <= df.loc[idx, 'b']:,但仍然收到错误的正确输入。

为什么python认为这是不相同的日期,我该如何更改?

还有比遍历更快的数据帧访问方法吗?

1 个答案:

答案 0 :(得分:1)

您不一定需要遍历DataFrame行(可能很慢),只需将DataFrame过滤到满足任一条件的所有行,就像这样:

awk 'BEGIN {$5 = toupper(substr($5,1,1))
    substr($5, 2)}1' input_file

或者,您可以分别过滤出abc_errors = df.loc[(df['a'] > df['b']) | (df['b'] > df['c'])] 个错误和ab个错误:

bc
相关问题