将具有小时的列转换为日期时间类型 pandas
Converting columns with hours to datetime type pandas
我尝试将 pandas 框架中“时间”格式的“时间”列从对象转换为日期时间 64,因为我想过滤几个小时。
我试过 new['Time'] = pd.to_datetime(new['Time'], format='%H:%M:%S').dt.time
一点效果都没有(它仍然是一个对象)。
我也试过new['Time'] = pd.to_datetime(new['Time'],infer_datetime_format=True)
得到错误信息:TypeError: <class 'datetime.time'> is not convertible to datetime
我希望能够在几个小时内对我的数据框进行排序。
- 如何将对象转换为小时?
- 然后我可以按小时过滤(例如早上 8 点之后的所有内容)还是我必须输入精确的分钟和秒值才能过滤?
谢谢
如果您希望 df['Time']
的类型为 datetime64
,只需使用
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S')
print(df['Time'])
这将导致以下列
0 1900-01-01 00:00:00
1 1900-01-01 00:01:00
2 1900-01-01 00:02:00
3 1900-01-01 00:03:00
4 1900-01-01 00:04:00
...
1435 1900-01-01 23:55:00
1436 1900-01-01 23:56:00
1437 1900-01-01 23:57:00
1438 1900-01-01 23:58:00
1439 1900-01-01 23:59:00
Name: Time, Length: 1440, dtype: datetime64[ns]
如果您只想从时间戳范围 pd.to_datetime(...)
中提取小时 .dt.hour
如果您想按小时对值进行分组,您还可以使用(将 df['Time']
转换为日期时间后):
new_df = df.groupby(pd.Grouper(key='Time', freq='H'))['Value'].agg({pd.Series.to_list})
这将 return 所有值按小时分组。
IIUC,您已经有一个来自 datetime
模块的 time
结构:
假设这个数据框:
from datetime import time
df = pd.DataFrame({'Time': [time(10, 39, 23), time(8, 47, 59), time(9, 21, 12)]})
print(df)
# Output:
Time
0 10:39:23
1 08:47:59
2 09:21:12
少量操作:
# Check if you have really `time` instance
>>> df['Time'].iloc[0]
datetime.time(10, 39, 23)
# Sort values by time
>>> df.sort_values('Time')
Time
1 08:47:59
2 09:21:12
0 10:39:23
# Extract rows from 08:00 and 09:00
>>> df[df['Time'].between(time(8), time(9))]
Time
1 08:47:59
我尝试将 pandas 框架中“时间”格式的“时间”列从对象转换为日期时间 64,因为我想过滤几个小时。
我试过 new['Time'] = pd.to_datetime(new['Time'], format='%H:%M:%S').dt.time
一点效果都没有(它仍然是一个对象)。
我也试过new['Time'] = pd.to_datetime(new['Time'],infer_datetime_format=True)
得到错误信息:TypeError: <class 'datetime.time'> is not convertible to datetime
我希望能够在几个小时内对我的数据框进行排序。
- 如何将对象转换为小时?
- 然后我可以按小时过滤(例如早上 8 点之后的所有内容)还是我必须输入精确的分钟和秒值才能过滤?
谢谢
如果您希望 df['Time']
的类型为 datetime64
,只需使用
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S')
print(df['Time'])
这将导致以下列
0 1900-01-01 00:00:00
1 1900-01-01 00:01:00
2 1900-01-01 00:02:00
3 1900-01-01 00:03:00
4 1900-01-01 00:04:00
...
1435 1900-01-01 23:55:00
1436 1900-01-01 23:56:00
1437 1900-01-01 23:57:00
1438 1900-01-01 23:58:00
1439 1900-01-01 23:59:00
Name: Time, Length: 1440, dtype: datetime64[ns]
如果您只想从时间戳范围 pd.to_datetime(...)
中提取小时 .dt.hour
如果您想按小时对值进行分组,您还可以使用(将 df['Time']
转换为日期时间后):
new_df = df.groupby(pd.Grouper(key='Time', freq='H'))['Value'].agg({pd.Series.to_list})
这将 return 所有值按小时分组。
IIUC,您已经有一个来自 datetime
模块的 time
结构:
假设这个数据框:
from datetime import time
df = pd.DataFrame({'Time': [time(10, 39, 23), time(8, 47, 59), time(9, 21, 12)]})
print(df)
# Output:
Time
0 10:39:23
1 08:47:59
2 09:21:12
少量操作:
# Check if you have really `time` instance
>>> df['Time'].iloc[0]
datetime.time(10, 39, 23)
# Sort values by time
>>> df.sort_values('Time')
Time
1 08:47:59
2 09:21:12
0 10:39:23
# Extract rows from 08:00 and 09:00
>>> df[df['Time'].between(time(8), time(9))]
Time
1 08:47:59