отбрасывание строк с определенным условием из фрейма данных - странный результат - PullRequest
0 голосов
/ 17 июня 2019

в кадре данных (данных), у меня есть столбец (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()

, так почему бы не работать в сценарии цикла?

...