8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

除法问题,除以日期时间和整数

LetsScrapeData 2月前

66 0

我有 dataFrame,两列:第一列是 result['days'] int 类型,第二列是 result['time'],datetime.time 类型。它是时间的总和,例如 02:27:39 我想要的是新列 = result['time'] / result['...

我有数据框,两列:

  • 首先是 result['days'] int 类型,
  • 第二个是 result['time'],datetime.time 类型。它是时间的总和,例如 02:27:39

我想要的是新列 = result['time'] / result['days'] 但我不能

unsupported operand type(s) for /: 'datetime.time' and 'int'

我怎样才能做到这一点?

帖子版权声明 1、本帖标题:除法问题,除以日期时间和整数
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由LetsScrapeData在本站《datetime》版块原创发布, 转载请注明出处!
最新回复 (0)
  • A datetime.time 不能被分割,但是 a datetime.timedelta 可以:

    import pandas as pd
    import datetime as dt
    
    def to_timedelta(time):
        return dt.timedelta(hours=time.hour, minutes=time.minute, seconds=time.second)
    
    df = pd.DataFrame({'days':[1,2,3], 'time':[dt.time(2,27,39)]*3})
    df['per_day'] = df.time.apply(to_timedelta) / df.days
    print(df)
    

    输出:

       days      time                per_day
    0     1  02:27:39        0 days 02:27:39
    1     2  02:27:39 0 days 01:13:49.500000
    2     3  02:27:39        0 days 00:49:13
    
  • 我有下一个例子 import pandas as pd data = {'id_number': ['000001000', '000009795', '000011722'], 'first_date': ['2022-01-08 13:41:00', '2022-11-07 09:16:00', '2022-02-15 12:4...

    我有下一个例子

    import pandas as pd
        
    data = {
        'id_number': ['000001000', '000009795', '000011722'],
        'first_date': ['2022-01-08 13:41:00', '2022-11-07 09:16:00', '2022-02-15 12:46:00'],
        'last_date': ['2023-06-13 16:33:00', '2022-11-30 12:59:00', '2022-06-21 11:42:00']
    }
    df_test = pd.DataFrame(data)
    
    # Try to calculate the difference in months
    df_test['first_date'] = pd.to_datetime(df_test['first_date'])
    df_test['last_date'] = pd.to_datetime(df_test['last_date'])
    df_test['months_difference'] = (df_test['last_date'] - df_test['first_date']) // pd.Timedelta('1 month')
    
    df_test
    

    但错误是

    ValueError: invalid unit abbreviation: month
    

    有没有什么办法可以计算出这个差异?

  • ss10 2月前 0 只看Ta
    引用 4

    另一种选择:将日期时间转换为周期 \'M\'(月份),然后转换为整数(给出自 1970 年以来的月份数),然后进行减法:

    df_test["last_date"].dt.to_period("M").astype(int)-df_test["first_date"].dt.to_period("M").astype(int)
    
    0    17
    1     0
    2     4
    dtype: int64
    
  • df_test[\'last_date\'].dt.to_period(\'M\').astype('int64')-df_test[\'first_date\'].dt.to_period(\'M\').astype('int64') 出现错误,必须更改格式

  • @danny 对,只使用 int 适用于 pandas v2+。可能不适用于旧版本。

  • 您可以尝试以下操作:

    df_test['months_difference'] = (df_test.last_date -df_test.first_date)/numpy.timedelta64(1, 'M')
    

    这将为您提供月份差异的浮点数,如果您希望它们为整数,请添加

    df_test['months_difference'] = df_test['months_difference'].astype(int)
    
  • 我认为 pandas 和 numpy 不再接受“M”的缩写,因为我收到此错误 ValueError:不支持单位 M。仅支持明确的 timedelta 值持续时间。允许的单位为“W”、“D”、“h”、“m”、“s”、“ms”、“us”、“ns”

  • 我找到了这个解决方案:

        # Create the DataFrame
    data = {
        'id_number': ['000001000', '000009795', '000011722'],
        'first_date': ['2022-01-08 13:41:00', '2022-11-07 09:16:00', '2022-02-15 12:46:00'],
        'last_date': ['2023-06-13 16:33:00', '2022-11-30 12:59:00', '2022-06-21 11:42:00']
    }
    df_test = pd.DataFrame(data)
    
    # Convert date columns to datetime
    df_test['first_date'] = pd.to_datetime(df_test['first_date'])
    df_test['last_date'] = pd.to_datetime(df_test['last_date'])
    
    # Calculate difference in months based on days
    df_test['months_difference'] = ((df_test['last_date'] - df_test['first_date']).dt.days) // 30.44 
    #30.44 is avg of days per month in a non-leap yer
    

    或者使用这个:

    df_test['months_difference'] = df_test['last_date'].dt.to_period('M').astype('int64') - df_test['first_date'].dt.to_period('M').astype('int64')
    
返回
作者最近主题: