numpy Pandas时间增量(天)

pgccezyw  于 2023-02-08  发布在  其他
关注(0)|答案(5)|浏览(108)

我在Pandas中有一个名为“munged_data”的 Dataframe ,包含两列“entry_date”和“dob”,我已使用www.example.com _timestamp将其转换为时间戳pd.to。我试图找出如何根据“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

然而,我似乎无法提取的日子作为一个整数,以便我可以继续我的计算。任何帮助感谢。

uoifb46i

uoifb46i1#

使用自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
c8ib6hqw

c8ib6hqw2#

你需要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]标量(例如,我们现在使用Timestamp表示datetime64[ns],其值为0.12)

qoefvg9y

qoefvg9y3#

不确定你是否还需要它,但是在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]

退货:
x一个一个一个一个x一个一个二个x
退货:

0   -4
 dtype: float64

希望能有所帮助

kqqjbcuj

kqqjbcuj4#

让我们指定一个名为time_difference的panda系列,其类型为numpy.timedelta64[ns]
一种只提取日期(或任何所需属性)的方法如下:

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

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

pprl5pva

pprl5pva5#

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

pd.Timedelta(1985, unit='Y').days
84494

相关问题