比较2个datetime64 [ns]数据帧列

时间:2017-10-26 09:27:50

标签: python pandas

我有两个日期列,即date1和date2。 我试图选择date1晚于date2的行 我试着

print df[df.loc[df['date1']>df['date2']]]

但我收到了错误

ValueError: Boolean array expected for the condition, not float64

1 个答案:

答案 0 :(得分:0)

在任何一种情况下,想法都是检索一个布尔掩码。然后,此布尔掩码将用于索引数据帧并检索相应的行。首先,生成一个掩码:

mask = df['date1'] > df['date2']

现在,使用此掩码来索引df

df = df.loc[mask]

这可以写成一行。

df = df.loc[df['date1'] > df['date2']]

此后您无需再执行其他级别的索引,df现在有最终结果。如果您计划对此筛选的数据框执行操作和重新分配,我建议loc,因为loc始终返回副本,而普通索引返回视图。

以下是一些做同样事情的方法:

选项1
df.query

df.query('date1 > date2')

选项2
df.eval

df[df.eval('date1 > date2')]

如果您的列不是日期,您现在也可以投射它们。使用pd.to_datetime

df.date1 = pd.to_datetime(df.date1)
df.date2 = pd.to_datetime(df.date2)

或者,在加载CSV时,请务必设置parse_dates开关:

df = pd.read_csv(..., parse_dates=['date1, date2'])