鱼C论坛

 找回密码
 立即注册
查看: 2061|回复: 1

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

[复制链接]
发表于 2023-4-12 07:36:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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))
最佳答案
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日开始计算的,你可以根据你的需求更改这个日期。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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日开始计算的,你可以根据你的需求更改这个日期。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表