как преобразовать timedelta в днях в строку?

Я понял разницу между началом текущей недели и датой начала недели, где дата - это столбец дат. Эта разница в днях. Когда я пытаюсь определить функцию для преобразования этих дней в разницу в 1 неделю, разницу в 2 недели и так далее.

Я получаю ошибку как:

Не удается сравнить тип «Timedelta» с типом «str»

Пожалуйста, помогите мне решить эту проблему. Меня беспокоит, ошибаюсь ли я в определении функции? вот код, определяющий функцию:

def check(diff):
    for d in final_data['diff']:
        if  ((d > '0 days') and (d <= '7 days')): 
            weekdiff = 'OneWeekDiff'
        elif ((d > '8 days') and (d <= '14 days')):
            weekdiff = 'TwoWeekDiff'
        else:       
            weekdiff = 'Current Week'
    return weekdiff

Чтобы узнать разницу между двумя столбцами, просто у меня есть вычитание следующим образом: final_data['diff'] = final_data['CurrentWeekStartDay'] - final_data['InvoiceWeekstartDay']

print(final_data['diff'] 0 14 дней 1 14 дней 2 14 дней


person snehal pimpare    schedule 01.08.2016    source источник
comment
final_data['diff'] можете ли вы распечатать это и прикрепить к вопросу   -  person Marlon Abeykoon    schedule 01.08.2016
comment
Привет, я добавил столбец «diff». Я использовал ваш код, но все равно получаю ту же ошибку.   -  person snehal pimpare    schedule 02.08.2016


Ответы (1)


Вам нужно преобразовать to_timedelta строки 0 days, 7 days... :

Затем я немного модифицирую функцию - убираю цикл и else. Вы можете использовать функцию apply для столбца DataFrame:

def check(d):
    weekdiff = 'Current Week'
    if  ((d > pd.to_timedelta('0 days')) and (d <= pd.to_timedelta('7 days'))): 
        weekdiff = 'OneWeekDiff'
    elif ((d > pd.to_timedelta('8 days')) and (d <= pd.to_timedelta('14 days'))):
        weekdiff = 'TwoWeekDiff'
    return weekdiff

print (final_data['diff'].apply(check))

Образец:

final_data = pd.DataFrame({'b': {0: pd.Timestamp('2016-01-13 00:00:00'), 
                                 1: pd.Timestamp('2016-01-05 00:00:00'), 
                                 2: pd.Timestamp('2016-01-03 00:00:00')}, 
                            'a': {0: pd.Timestamp('2016-01-01 00:00:00'), 
                                  1: pd.Timestamp('2016-01-02 00:00:00'), 
                                  2: pd.Timestamp('2016-01-03 00:00:00')}, 
                            'diff': {0: pd.Timedelta('12 days 00:00:00'), 
                                     1: pd.Timedelta('3 days 00:00:00'), 
                                     2: pd.Timedelta('0 days 00:00:00')}})
print (final_data)
           a          b    diff
0 2016-01-01 2016-01-13 12 days
1 2016-01-02 2016-01-05  3 days
2 2016-01-03 2016-01-03  0 days

print (final_data['diff'].apply(check))
0     TwoWeekDiff
1     OneWeekDiff
2    Current Week
Name: diff, dtype: object
person jezrael    schedule 01.08.2016
comment
Если мой ответ был полезен, не забудьте принять его. Спасибо. - person jezrael; 01.08.2016