【问题标题】:how to convert timedelta which is in days into string?如何将以天为单位的 timedelta 转换为字符串?
【发布时间】:2016-12-06 02:41:23
【问题描述】:

我在当前周开始和日期周开始之间进行了区分,其中日期是日期列。这种差异以天为单位。当我试图定义将这些天数转换为 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']

打印(final_data['diff'] 0 14 天 1 14 天 2 14 天

【问题讨论】:

  • final_data['diff'] 你能打印这个并附在问题上吗
  • 您好,我添加了 'diff' 列。我使用了您的代码,但仍然遇到同样的错误。

标签: python string pandas dataframe timedelta


【解决方案1】:

你需要转换to_timedelta字符串0 days,7 days...:

然后我稍微修改函数 - 删除循环和else。您可以为DataFrame 的列提供apply 函数:

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

【讨论】:

  • 如果我的回答有帮助,别忘了accept。谢谢。
猜你喜欢
  • 2021-02-17
  • 2013-04-12
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
相关资源
最近更新 更多