futui 发表于 2023-4-12 07:36:31

pandas 某整列天数转年限的更精确方法,求大师帮忙

本帖最后由 futui 于 2023-4-12 07:45 编辑

pandas某整列为天数,需要转年限 ,下面是代码,有更精确的方法吗(?年?月?日),求大师指导

def days_to_years(days):
    return np.floor(days / 365)
# 使用 apply() 函数将函数应用到数据框中的整列
df['years_column'] = df['days_column'].apply(lambda x: days_to_years(x))

isdkz 发表于 2023-4-12 08:16:12

为了将天数转换为更精确的年限格式(包括年、月和日),可以使用divmod()函数。

divmod()函数接受两个参数,第一个参数是要除的数,第二个参数是除数,返回商和余数。

这里是一个改进的days_to_years()函数,它将天数转换为x年y月z日的格式:

import pandas as pd
import numpy as np

def days_to_years(days):
    years, remaining_days = divmod(days, 365)
    months, days = divmod(remaining_days, 30)
    return f"{years}年{months}月{days}日"

# 使用 apply() 函数将函数应用到数据框中的整列
df['years_column'] = df['days_column'].apply(lambda x: days_to_years(x))

请注意,这个方法假设每年有365天,每月有30天。这是一个简化的近似,因为实际上每年和每月的天数可能有所不同。

为了更精确地计算日期差异,可以使用Python的dateutil库:

首先,确保已经安装了dateutil库,如果没有的话,可以通过以下命令安装:

pip install python-dateutil

然后,可以使用dateutil库中的relativedelta函数来更精确地计算日期差异:

import pandas as pd
from datetime import date
from dateutil.relativedelta import relativedelta

def days_to_years(start_date, days):
    end_date = start_date + pd.Timedelta(days=days)
    delta = relativedelta(end_date, start_date)
    return f"{delta.years}年{delta.months}月{delta.days}日"

start_date = date(2000, 1, 1)
df['years_column'] = df['days_column'].apply(lambda x: days_to_years(start_date, x))


这种方法需要一个起始日期(start_date),从该日期开始计算天数。

这里我们假设所有天数都是从2000年1月1日开始计算的,你可以根据你的需求更改这个日期。
页: [1]
查看完整版本: pandas 某整列天数转年限的更精确方法,求大师帮忙