我有两个日期列,即date1和date2。 我试图选择date1晚于date2的行 我试着
print df[df.loc[df['date1']>df['date2']]]
但我收到了错误
ValueError: Boolean array expected for the condition, not float64
答案 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'])