Pandas数据帧Timedelta格式:带天或带累积小时数

问题描述 投票:0回答:1

[我试图理解,这取决于大熊猫以“天”或累计小时数显示Timedelta值。

在下面的示例中,我获取一个Timedelta列并计算其累计和:

In [1]: import pandas as pd                                                                                                                                                      

In [2]: pd.__version__                                                                                                                                                           
Out[2]: '1.0.3'

In [3]: df = pd.DataFrame( 
   ...:     [ 
   ...:         "01:07:37", 
   ...:         "13:16:44", 
   ...:         "11:09:56", 
   ...:         "12:05:00", 
   ...:         "01:33:01", 
   ...:     ], 
   ...:     columns=["Duration"], 
   ...: )                                                                                                                                                                        

In [4]: df.loc[:, 'Duration'] = pd.to_timedelta(df['Duration']) 
   ...: df.loc[:, 'Cumulative'] = df['Duration'].cumsum() 
   ...:  
   ...: df                                                                                                                                                                       
Out[4]: 
  Duration      Cumulative
0 01:07:37 0 days 01:07:37
1 13:16:44 0 days 14:24:21
2 11:09:56 1 days 01:34:17
3 12:05:00 1 days 13:39:17
4 01:33:01 1 days 15:12:18

在结果数据框中,新列(Cumulative)显示'天',而原始列(Duration)显示累积的小时数。

两列具有相同的数据类型。

In [5]: df.dtypes                                                                                                                                                                
Out[5]: 
Duration      timedelta64[ns]
Cumulative    timedelta64[ns]
dtype: object

此外,当我查看第一行时,它显示的是“小时数”格式,但是当我查看单个值时,它以Timedelta('N days HH:MM:SS')格式返回它们。 >

In [6]: df.iloc[0, :]                                                                                                                                                            
Out[6]: 
Duration     01:07:37
Cumulative   01:07:37
Name: 0, dtype: timedelta64[ns]

In [7]: df['Duration'][0], df['Cumulative'][0]                                                                                                                                   
Out[7]: (Timedelta('0 days 01:07:37'), Timedelta('0 days 01:07:37'))

所以我的问题是,为什么会发生这种变化以及如何控制它?

编辑

正如@Moosa Saadat和@Quang Hoang指出的,当any的Timedelta值超过24小时阈值时,会发生不同格式之间的转换。

由于我没有找到执行此转换的内置方法,所以这是一个小的帮助程序功能,它以累积小时数格式打印Timedelta值。

In [4]: def days_to_cumhours(timedelta): 
   ...:     hours = timedelta.components[0] * 24 + timedelta.components[1] 
   ...:  
   ...:     return f"{hours:0>2}:{timedelta.components[2]:0>2}:{timedelta.components[3]:0>2}"                                                                                                                                                                  

In [5]: df['Cumulative'].apply(days_to_cumhours)                                                                                                                                 
Out[5]: 
0    01:07:37
1    14:24:21
2    25:34:17
3    37:39:17
4    39:12:18
Name: Cumulative, dtype: object

我试图理解,这取决于大熊猫以“天”或累计小时数显示Timedelta值。在下面的示例中,我使用一个Timedelta列,然后...

python pandas dataframe time timedelta
1个回答
1
投票

为什么会发生这种变化?

© www.soinside.com 2019 - 2024. All rights reserved.