簡體   English   中英

將HH:MM的pandas中的列轉換為分鍾

[英]Convert a column in pandas of HH:MM to minutes

我想將hh:mm格式的數據集中的列轉換為分鍾。 我嘗試了以下代碼,但它說“AttributeError:'Series'對象沒有屬性'split'”。 數據采用以下格式。 我在數據集中也有nan值,計划是計算值的中值,然后用中位數填充具有nan的行

02:32
02:14
02:31
02:15
02:28
02:15
02:22
02:16
02:22
02:14

到目前為止我已經嘗試過了

 s = dataset['Enroute_time_(hh mm)']

   hours, minutes = s.split(':')
   int(hours) * 60 + int(minutes)

我建議你避免逐行計算。 您可以使用帶有Pandas / NumPy的矢量化方法:

df = pd.DataFrame({'time': ['02:32', '02:14', '02:31', '02:15', '02:28', '02:15', 
                            '02:22', '02:16', '02:22', '02:14', np.nan]})

values = df['time'].fillna('00:00').str.split(':', expand=True).astype(int)
factors = np.array([60, 1])

df['mins'] = (values * factors).sum(1)

print(df)

     time  mins
0   02:32   152
1   02:14   134
2   02:31   151
3   02:15   135
4   02:28   148
5   02:15   135
6   02:22   142
7   02:16   136
8   02:22   142
9   02:14   134
10    NaN     0

如果要使用split ,則需要使用str訪問器,即s.str.split(':')

但是我認為在這種情況下使用apply更有意義:

df = pd.DataFrame({'Enroute_time_(hh mm)': ['02:32', '02:14', '02:31', 
                                            '02:15', '02:28', '02:15', 
                                            '02:22', '02:16', '02:22', '02:14']})

def convert_to_minutes(value):
    hours, minutes = value.split(':')
    return int(hours) * 60 + int(minutes)

df['Enroute_time_(hh mm)'] = df['Enroute_time_(hh mm)'].apply(convert_to_minutes)
print(df)

#       Enroute_time_(hh mm)
#    0                   152
#    1                   134
#    2                   151
#    3                   135
#    4                   148
#    5                   135
#    6                   142
#    7                   136
#    8                   142
#    9                   134

我知道你在DataFrame中有一個列,其中有多個Timedeltas作為字符串。 然后你想要提取Deltas的總分鍾數。 之后,您希望使用總分鍾的中位數填充NaN值。

import pandas as pd
df = pd.DataFrame(
     {'hhmm' : ['02:32',
                '02:14',
                '02:31',
                '02:15',
                '02:28',
                '02:15',
                '02:22',
                '02:16',
                '02:22',
                '02:14']})
  1. 你的Timedeltas不是Timedeltas。 他們是字符串。 所以你需要先轉換它們。

     df.hhmm = pd.to_datetime(df.hhmm, format='%H:%M') df.hhmm = pd.to_timedelta(df.hhmm - pd.datetime(1900, 1, 1)) 

    這給出了以下值( 注意dtype:timedelta64 [ns] here

     0 02:32:00 1 02:14:00 2 02:31:00 3 02:15:00 4 02:28:00 5 02:15:00 6 02:22:00 7 02:16:00 8 02:22:00 9 02:14:00 Name: hhmm, dtype: timedelta64[ns] 
  2. 既然你有真正的timedeltas,你可以使用一些很酷的函數,比如total_seconds() ,然后計算分鍾數。

     df.hhmm.dt.total_seconds() / 60 
  3. 如果這不是您想要的,您還可以使用以下內容。

     df.hhmm.dt.components.minutes 

    這為您提供了HH:MM字符串的分鍾,就好像您將它分開一樣。

  4. 填寫na值。

      df.hhmm.fillna((df.hhmm.dt.total_seconds() / 60).mean()) 

    要么

     df.hhmm.fillna(df.hhmm.dt.components.minutes.mean()) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM