在数据帧(data)中,我有一列timedeltas(time_spent_er)。 我想在“ time_spent_er”列中删除所有具有负timedelta且大于1天timedelta的行。
到目前为止,我编写了一个循环,该循环获取应删除的行的所有索引,然后使用drop。
badRows=[]
for i in data.index:
if data.time_spent_er.loc[i]<pd.to_timedelta(0):
badRows.append(i)
elif data.time_spent_er[i]>pd.to_timedelta(1,'D'):
badRows.append(i)
data.drop(badRows)
遇到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
尝试
if data.time_spent_er.loc[i].all()<pd.to_timedelta(0):
得到
AttributeError: 'Timedelta' object has no attribute 'all'
然后我尝试将所有内容转换为秒:
badRows=[]
for i in data.index:
if data.time_spent_er.loc[i].total_seconds()<0:
badRows.append(i)
elif data.time_spent_er[i].total_seconds()>24*3600:
badRows.append(i)
data.drop(badRows)
得到
AttributeError: 'Series' object has no attribute 'total_sec
最令人沮丧的部分是,对象一次是一个系列,一次是一个时间增量。我想念什么?
此外,在检查单个元素时,我收到了预期的结果:
data.time_spent_er.loc[data.index[0]].total_seconds()
那为什么在循环情况下不起作用?