Pandas 时间增量(以天为单位)

2025-03-04 08:27:00
admin
原创
71
摘要:问题描述:我在 pandas 中有一个称为“munged_data”的数据框,其中包含两列“entry_date”和“dob”,我已使用 pd.to_timestamp 将其转换为时间戳。我正在尝试弄清楚如何根据“entry_date”和“dob”之间的时间差来计算人的年龄,为此,我需要获取两列之间的天数差(...

问题描述:

我在 pandas 中有一个称为“munged_data”的数据框,其中包含两列“entry_date”和“dob”,我已使用 pd.to_timestamp 将其转换为时间戳。我正在尝试弄清楚如何根据“entry_date”和“dob”之间的时间差来计算人的年龄,为此,我需要获取两列之间的天数差(这样我就可以执行类似 round(days/365.25) 的操作。我似乎无法找到使用矢量化操作来执行此操作的方法。当我执行 munged_data.entry_date-munged_data.dob 时,我得到以下内容:

internal_quote_id
2                    15685977 days, 23:54:30.457856
3                    11651985 days, 23:49:15.359744
4                     9491988 days, 23:39:55.621376
7                     11907004 days, 0:10:30.196224
9                    15282164 days, 23:30:30.196224
15                  15282227 days, 23:50:40.261632  

但是我似乎无法将天数提取为整数,以便继续计算。如能提供任何帮助,不胜感激。


解决方案 1:

使用自 v0.15.0 以来可用的 Pandas 类型,Timedelta您还可以执行以下操作:

In[1]: import pandas as pd
In[2]: df = pd.DataFrame([ pd.Timestamp('20150111'), 
                           pd.Timestamp('20150301') ], columns=['date'])
In[3]: df['today'] = pd.Timestamp('20150315')
In[4]: df
Out[4]: 
        date      today
0 2015-01-11 2015-03-15
1 2015-03-01 2015-03-15

In[5]: (df['today'] - df['date']).dt.days
Out[5]: 
0    63
1    14
dtype: int64

解决方案 2:

您需要 0.11 版本(0.11rc1 已发布,最终版本将于下周发布)

In [9]: df = DataFrame([ Timestamp('20010101'), Timestamp('20040601') ])

In [10]: df
Out[10]: 
                    0
0 2001-01-01 00:00:00
1 2004-06-01 00:00:00

In [11]: df = DataFrame([ Timestamp('20010101'), 
                          Timestamp('20040601') ],columns=['age'])

In [12]: df
Out[12]: 
                  age
0 2001-01-01 00:00:00
1 2004-06-01 00:00:00

In [13]: df['today'] = Timestamp('20130419')

In [14]: df['diff'] = df['today']-df['age']

In [16]: df['years'] = df['diff'].apply(lambda x: float(x.item().days)/365)

In [17]: df
Out[17]: 
                  age               today                diff      years
0 2001-01-01 00:00:00 2013-04-19 00:00:00 4491 days, 00:00:00  12.304110
1 2004-06-01 00:00:00 2013-04-19 00:00:00 3244 days, 00:00:00   8.887671

您需要在最后应用这个奇怪的功能,因为尚未完全支持 timedelta64[ns] 标量(例如,我们现在如何使用时间戳来表示 datetime64[ns],在 0.12 中出现)

解决方案 3:

不确定您是否仍然需要它,但在 Pandas 0.14 中我通常使用 .astype('timedelta64[X]') 方法
http://pandas.pydata.org/pandas-docs/stable/timeseries.html(频率转换)

df = pd.DataFrame([ pd.Timestamp('20010101'), pd.Timestamp('20040605') ])
df.ix[0]-df.ix[1]

返回:

0   -1251 days
dtype: timedelta64[ns]
(df.ix[0]-df.ix[1]).astype('timedelta64[Y]')

返回:

  0   -4
 dtype: float64

希望有帮助

解决方案 4:

假设您有一个名为 time_difference 的 pandas 系列,其类型为
numpy.timedelta64[ns]

提取日期(或任何所需属性)的一种方法如下:

just_day = time_difference.apply(lambda x: pd.tslib.Timedelta(x).days)

使用此函数是因为 numpy.timedelta64 对象没有“days”属性。

解决方案 5:

要将任何类型的数据转换为天数,只需使用pd.Timedelta().days

pd.Timedelta(1985, unit='Y').days
84494
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用