![](/img/trans.png)
[英]How to convert pandas dataframe column consisting of minutes in integer format to HH:MM format?
[英]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']})
你的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]
既然你有真正的timedeltas,你可以使用一些很酷的函數,比如total_seconds()
,然后計算分鍾數。
df.hhmm.dt.total_seconds() / 60
如果這不是您想要的,您還可以使用以下內容。
df.hhmm.dt.components.minutes
這為您提供了HH:MM字符串的分鍾,就好像您將它分開一樣。
填寫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.