MRHarv
MRHarv

Reputation: 503

Extracting the hour from a time column in pandas

Suppose I have the following dataset:

enter image description here

How would I create a new column, to be the hour of the time?

For example, the code below works for individual times, but I haven't been able to generalise it for a column in pandas.

t = datetime.strptime('9:33:07','%H:%M:%S')
print(t.hour)

Upvotes: 4

Views: 18195

Answers (3)

Adeyemo Adedamola
Adeyemo Adedamola

Reputation: 1

You can use extract() twice to feature out the 'hour' column

df['hour'] = df. TIME. str. extract("(\d+:)")
df['hour'] = df. hour. str. extract("(\d+)")

Upvotes: 0

jezrael
jezrael

Reputation: 863541

Use to_datetime to datetimes with dt.hour:

df = pd.DataFrame({'TIME':['9:33:07','9:41:09']})

#should be slowier
#df['hour'] = pd.to_datetime(df['TIME']).dt.hour

df['hour'] = pd.to_datetime(df['TIME'], format='%H:%M:%S').dt.hour
print (df)
      TIME  hour
0  9:33:07     9
1  9:41:09     9

If want working with datetimes in column TIME is possible assign back:

df['TIME'] = pd.to_datetime(df['TIME'], format='%H:%M:%S')

df['hour'] = df['TIME'].dt.hour
print (df)
                 TIME  hour
0 1900-01-01 09:33:07     9
1 1900-01-01 09:41:09     9

Upvotes: 11

Rojo Pitiavana
Rojo Pitiavana

Reputation: 41

My suggestion:

df = pd.DataFrame({'TIME':['9:33:07','9:41:09']})
df['hour']= df.TIME.str.extract("(^\d+):", expand=False)
  • "str.extract(...)" is a vectorized function that extract a regular expression pattern ( in our case "(^\d+):" which is the hour of the TIME) and return a Pandas Series object by specifying the parameter "expand= False"
  • The result is stored in the "hour" column

Upvotes: 1

Related Questions