从数据框中删除具有特定条件的行-奇怪的结果

时间:2019-06-17 16:24:17

标签: series attributeerror timedelta

在数据帧(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()

那为什么在循环情况下不起作用?

0 个答案:

没有答案