我得到了一个数据帧的列:
print(df["Hour"])
Hour
0 01:21:46
1 01:22:16
2 01:22:46
3 01:25:16
4 01:25:46 它说列类型是object,但是当我尝试使用pd.to_datetime进行转换时,TypeError: <class 'datetime.time'> is not convertible to datetime说。事实上,我正在尝试将该列的每一行的时间减去00:00,这样我就可以将结果转换为分钟。我试着创建a=pd.to_datetime("00:00"),但它包含了当前日期,并且我只想要我之前写的时间。
我尝试使用df["newhour"]=df["Hour"]-a,但它显示错误:TypeError: descriptor '__sub__' requires a 'datetime.datetime' object but received a 'numpy.ndarray'。
我知道另一种解决方案是将每次时间转换为分钟,所以我尝试使用df["Hour"].dt.seconds,但它显示错误:AttributeError: Can only use .dt accessor with datetimelike values.
您好!!
发布于 2020-06-23 15:54:16
该错误消息是您的列包含datetime.time对象的证据。标准pd.to_datetime只能转换str或datetime.datetime对象。因此,您必须首先将每个小时转换为可接受的格式。在这里,我会将所有内容转换为秒:
df['Hour'].apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)它给出了一个整数Series,您现在可以轻松地处理它(除以60。要将其转换为分钟,或...):
0 4906
1 4936
2 4966
3 5116
4 5146发布于 2020-06-23 15:22:03
要获得分钟或秒数,您可以简单地执行以下操作:
df1['Minutes'] = round(pd.to_datetime(df1['Hour']).apply(lambda x: x.hour * 60 + x.minute + x.second / 60), 1)
df['Seconds'] = pd.to_datetime(df['Hour']).apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)要得到以秒为单位的差值,您可以使用.shift()
df['Seconds_diff'] = df['Seconds'] - df['Seconds'].shift()发布于 2020-06-23 16:21:28
dt访问器是“dt.Second”。所以我想我们可以减去它。忽略'1900-01-01‘,因为我用'to_datetime’转换了它。
df['Hour'] = pd.to_datetime(df['Hour'], format='%H:%M:%S')
df['seconds_diff'] = (df['Hour'].dt.minute - df['Hour'].shift().dt.minute)*60+(df['Hour'].dt.second - df['Hour'].shift().dt.second)
Hour seconds_diff
0 1900-01-01 01:21:46 NaN
1 1900-01-01 01:22:16 30.0
2 1900-01-01 01:22:46 30.0
3 1900-01-01 01:25:16 150.0
4 1900-01-01 01:25:46 30.0https://stackoverflow.com/questions/62529150
复制相似问题