日期时间数据类型是对象而不是日期时间
Datetime dtype is Object not Datetime
我的意思是按时间戳分组。首先,我必须将我得到的时间(字符串)转换为日期时间。将其转换为日期时间后,我注意到尽管给出了 pandas 添加日期的特定格式,但我不需要日期。我正在努力删除它并只保留时间对象,但我没有成功。我所做的任何删除日期 returns 的 dtype 到我无法对其进行分组的对象。
示例数据:
https://miratrix.co.uk/ 00:01:55
https://miratrix.co.uk/ 00:02:02
https://miratrix.co.uk/ 00:02:45
https://miratrix.co.uk/ 00:01:22
https://miratrix.co.uk/ 00:02:02
https://miratrix.co.uk/app-marketing-agency/ 00:02:23
https://miratrix.co.uk/get-in-touch/ 00:02:26
https://miratrix.co.uk/get-in-touch/ 00:00:18
https://miratrix.co.uk/get-in-touch/ 00:02:37
https://miratrix.co.uk/ 00:00:31
https://miratrix.co.uk/ 00:02:00
https://miratrix.co.uk/app-store-optimization-... 00:02:25
https://miratrix.co.uk/ 00:03:36
https://miratrix.co.uk/app-marketing-agency/ 00:02:09
https://miratrix.co.uk/get-in-touch/ 00:02:14
https://?page_id=16198/ 00:00:15
https://videos/channel/UCAQfRNzXGD4BQICkO1KQZUA/ 00:09:07
https://miratrix.co.uk/get-in-touch/ 00:01:39
https://miratrix.co.uk/app-marketing-agency/ 00:01:07
到目前为止我尝试了什么
*Returned Object*
ga_organic['NEW Avg. Time on Page'] = pd.to_datetime(ga_organic['Avg. Time on Page'], format="%H:%M:%S").dt.time
*Returned Datetime but when trying to sample only time it returned an object*
ga_organic['NEW Avg. Time on Page'] = ga_organic['Avg. Time on Page'].astype('datetime64[ns]')
ga_organic['NEW Avg. Time on Page'].dt.time
我感觉有一些我不知道的关于日期时间的东西,这就是我遇到这个问题的原因。欢迎任何帮助或指导。
####更新####
感谢ALollz提供时间戳的解决方案
ga_organic['NEW Avg. Time on Page'] = pd.to_timedelta(ga_organic['Avg. Time on Page'])
然而,当我使用这种方法使用 GroupBy 时,我仍然遇到同样的错误:
avg_time = ga_organic.groupby(ga_organic.index)['NEW Avg. Time on Page'].mean()
错误:"DataError: No numeric types to aggregate"
是否有处理分组日期时间的特定函数?
似乎 groupby
无法将 timedelta64
识别为数字类型。有几种解决方法,可以使用 numeric_only=False
或使用 total_seconds
.
import pandas as pd
#df = pd.read_clipboard(header=None)
#df[1] = pd.to_timedelta(df[1])
df.groupby(df.index//2)[1].mean()
#DataError: No numeric types to aggregate
# To fix pass `numeric_only=False`
df.groupby(df.index//2)[1].mean(numeric_only=False)
#0 00:01:58.500000
#1 00:02:03.500000
#2 00:02:12.500000
#3 00:01:22
#4 00:01:34
#5 00:02:12.500000
#6 00:02:52.500000
#7 00:01:14.500000
#8 00:05:23
#9 00:01:07
#Name: 1, dtype: timedelta64[ns]
使用简单的 float
值 .total_seconds
:
df[1] = df[1].dt.total_seconds()
df.groupby(df.index//2)[1].mean()
#0 118.5
#1 123.5
#2 132.5
#3 82.0
#4 94.0
#5 132.5
#6 172.5
#7 74.5
#8 323.0
#9 67.0
#Name: 1, dtype: float64
这可以通过 pd.to_timedelta
指定 unit='s'
转换回来
我的意思是按时间戳分组。首先,我必须将我得到的时间(字符串)转换为日期时间。将其转换为日期时间后,我注意到尽管给出了 pandas 添加日期的特定格式,但我不需要日期。我正在努力删除它并只保留时间对象,但我没有成功。我所做的任何删除日期 returns 的 dtype 到我无法对其进行分组的对象。
示例数据:
https://miratrix.co.uk/ 00:01:55
https://miratrix.co.uk/ 00:02:02
https://miratrix.co.uk/ 00:02:45
https://miratrix.co.uk/ 00:01:22
https://miratrix.co.uk/ 00:02:02
https://miratrix.co.uk/app-marketing-agency/ 00:02:23
https://miratrix.co.uk/get-in-touch/ 00:02:26
https://miratrix.co.uk/get-in-touch/ 00:00:18
https://miratrix.co.uk/get-in-touch/ 00:02:37
https://miratrix.co.uk/ 00:00:31
https://miratrix.co.uk/ 00:02:00
https://miratrix.co.uk/app-store-optimization-... 00:02:25
https://miratrix.co.uk/ 00:03:36
https://miratrix.co.uk/app-marketing-agency/ 00:02:09
https://miratrix.co.uk/get-in-touch/ 00:02:14
https://?page_id=16198/ 00:00:15
https://videos/channel/UCAQfRNzXGD4BQICkO1KQZUA/ 00:09:07
https://miratrix.co.uk/get-in-touch/ 00:01:39
https://miratrix.co.uk/app-marketing-agency/ 00:01:07
到目前为止我尝试了什么
*Returned Object*
ga_organic['NEW Avg. Time on Page'] = pd.to_datetime(ga_organic['Avg. Time on Page'], format="%H:%M:%S").dt.time
*Returned Datetime but when trying to sample only time it returned an object*
ga_organic['NEW Avg. Time on Page'] = ga_organic['Avg. Time on Page'].astype('datetime64[ns]')
ga_organic['NEW Avg. Time on Page'].dt.time
我感觉有一些我不知道的关于日期时间的东西,这就是我遇到这个问题的原因。欢迎任何帮助或指导。
####更新####
感谢ALollz提供时间戳的解决方案
ga_organic['NEW Avg. Time on Page'] = pd.to_timedelta(ga_organic['Avg. Time on Page'])
然而,当我使用这种方法使用 GroupBy 时,我仍然遇到同样的错误:
avg_time = ga_organic.groupby(ga_organic.index)['NEW Avg. Time on Page'].mean()
错误:"DataError: No numeric types to aggregate"
是否有处理分组日期时间的特定函数?
似乎 groupby
无法将 timedelta64
识别为数字类型。有几种解决方法,可以使用 numeric_only=False
或使用 total_seconds
.
import pandas as pd
#df = pd.read_clipboard(header=None)
#df[1] = pd.to_timedelta(df[1])
df.groupby(df.index//2)[1].mean()
#DataError: No numeric types to aggregate
# To fix pass `numeric_only=False`
df.groupby(df.index//2)[1].mean(numeric_only=False)
#0 00:01:58.500000
#1 00:02:03.500000
#2 00:02:12.500000
#3 00:01:22
#4 00:01:34
#5 00:02:12.500000
#6 00:02:52.500000
#7 00:01:14.500000
#8 00:05:23
#9 00:01:07
#Name: 1, dtype: timedelta64[ns]
使用简单的 float
值 .total_seconds
:
df[1] = df[1].dt.total_seconds()
df.groupby(df.index//2)[1].mean()
#0 118.5
#1 123.5
#2 132.5
#3 82.0
#4 94.0
#5 132.5
#6 172.5
#7 74.5
#8 323.0
#9 67.0
#Name: 1, dtype: float64
这可以通过 pd.to_timedelta
指定 unit='s'