в кадре данных (данных), у меня есть столбец (time_spent_er) timedeltas.я хочу отбросить все строки с отрицательной timedelta и больше, чем 1 день timedelta в столбце 'time_spent_er'.
до сих пор я написал цикл, который получает все индексы строк, которые должны быть удалены, а затем с помощью 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
самая расстраивающая часть состоит в том, что один раз объект является серией, а один раз - timedelta. Что я пропускаю?
Более того, я получил желаемый результат при проверке одного элемента:
data.time_spent_er.loc[data.index[0]].total_seconds()
, так почему бы не работать в сценарии цикла?