我试图在 Pandas 的数据框中添加两个系列,第一个系列是从 excel 文件导出的 24 小时时间值(例如 17:30),第二个系列是 Timedelta 中相同长度的系列使用pd.Timedelta"命令从浮点数转换的格式.
I am attempting to add two series in a dataframe in pandas with the first series being a 24-hr time value (e.g. 17:30) exported from an excel file and the second series being a series of the same length in Timedelta format converted from floats with the 'pd.Timedelta' command.
无论日变化如何(例如 22:00 + 4 小时 = 02:00),所需的第三列都是 24 小时时间.
The desired resulting third column would be a 24-hr time regardless of day change (e.g. 22:00 + 4 hours = 02:00).
我像这样创建了 Delta 系列:
I created the Delta series like this:
delta = pd.Series(0 for x in range(0, len(df.Time_In_Hours))) for j in range(0, len(df.Time_In_Hours)): delta[j] = pd.Timedelta(df.Time_In_Hours[j], 'h') df = df.assign(Delta = delta) print ("Delta dtype = %s" % (df.Delta.dtype)) print ("Start_Time dtype = %s" % (df.Start_Time.dtype)) #Output Delta dtype = object Start_Time dtype = object我的目标是:
df["end_Time"] = df["Start_Time"] + df["Delta"]我收到的错误是:类型错误:+ 不支持的操作数类型:'datetime.time' 和 'Timedelta'
似乎这种 datetime.time 格式是不可变的.我错过了什么吗?
It seems this datetime.time format is immutable. Am I missing something?
推荐答案原因
错误很明显.如果您检查元素的类型,您会发现在某些时候您要添加datetime.time 对象和pandas.Timedelta.
有两种日期、时间和时间增量:
There are 2 kinds of dates, times and timedeltas:
- python 内置于 datetime 模块,即 datetime.time, datetime.date, datetime.timedelta, ...
- pandas/numpy 即 pandas.Timestamp, pandas.Timedelta
- python's builtin from datetime module i.e. datetime.time, datetime.date, datetime.timedelta, ...
- pandas / numpy i.e pandas.Timestamp, pandas.Timedelta
这两个堆栈对于加法或比较等基本操作是不兼容的.
these two stacks are incompatible for basic operations as addition or comparison.
将所有内容转换为pandas类型并最终提取时间
Convert everything to pandas type and extract the times in the end
您应该确保列的 dtypes 类似于 datetime64[ns] 和 timedelta64[ns].为此,尝试使用 pd.to_datetime 和 pd.to_timedelta 显式转换它们.
You should make sure, that dtypes of your columns are something like datetime64[ns] and timedelta64[ns]. For that, try converting them explicitly using pd.to_datetime and pd.to_timedelta.
另一种方法是将 Delta 列转换为 datetime.timedelta 您可以尝试
Another approach would be just converting the Delta column to datetime.timedelta you could try
df["end_Time"] = df["Start_Time"] + df["Delta"].map(pd.Timedelta.to_pytimedelta)但是根据您的 df["Delta"] 和 df["Start_Time"]
更多推荐
Python Pandas:类型错误:+ 不支持的操作数类型:'datetime.time' 和 'Timedelta'
发布评论