仅添加到数据框列中的负天数
Add only to negative days in dataframe columns
我有一个数据框,其中我获得了两个不同时间之间的差异列(下面是一个示例):
difference
00:30:15
00:15:00
-1 days +02:27:00
-1 days +00:41:00
这些值被标记为 timedelta 类型。那么我怎样才能只为那些负值添加一天(将差值变为正值)?我尝试过:
mask=df[df["difference"]<"0"]
df[mask,"difference"]=df["difference"] + pd.Timedelta(days=1)
(零引号因为否则不接受,不知道为什么)
输出:
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
然后我尝试:
df.loc[df["difference"]<0, "difference"]=df["difference"] + pd.Timedelta(days=1)
输出:
TypeError: Invalid comparison between dtype=timedelta64[ns] and int
所以,我不知道还能做什么。我在这里复习了很多问题,但 none 到目前为止对我有帮助。欢迎任何想法。
试试这个:
df.loc[df['difference'] < '0', 'difference'] = df["difference"] + pd.Timedelta(days=1)
你快到了。 mask
应该是布尔数组,而不是数据框:
mask=df["difference"]<"0" # << Note the change
df.loc[mask,"difference"]=df["difference"] + pd.Timedelta(days=1)
print(df)
输出:
difference
0 00:30:15
1 00:15:00
2 02:27:00
3 00:41:00
你能用 dtype 找出列中值的类型吗?如果它们不是日期类型,您将无法比较。
您的第二次尝试几乎成功...但是,如异常中所述,您无法比较 pd.Timedelta < int
,在这种情况下 0
是整数。
您可以使用
修复它
df.loc[df["difference"] < pd.Timedelta(0), "difference"]=df["difference"] + pd.Timedelta(days=1)
我有一个数据框,其中我获得了两个不同时间之间的差异列(下面是一个示例):
difference
00:30:15
00:15:00
-1 days +02:27:00
-1 days +00:41:00
这些值被标记为 timedelta 类型。那么我怎样才能只为那些负值添加一天(将差值变为正值)?我尝试过:
mask=df[df["difference"]<"0"]
df[mask,"difference"]=df["difference"] + pd.Timedelta(days=1)
(零引号因为否则不接受,不知道为什么)
输出:
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
然后我尝试:
df.loc[df["difference"]<0, "difference"]=df["difference"] + pd.Timedelta(days=1)
输出:
TypeError: Invalid comparison between dtype=timedelta64[ns] and int
所以,我不知道还能做什么。我在这里复习了很多问题,但 none 到目前为止对我有帮助。欢迎任何想法。
试试这个:
df.loc[df['difference'] < '0', 'difference'] = df["difference"] + pd.Timedelta(days=1)
你快到了。 mask
应该是布尔数组,而不是数据框:
mask=df["difference"]<"0" # << Note the change
df.loc[mask,"difference"]=df["difference"] + pd.Timedelta(days=1)
print(df)
输出:
difference
0 00:30:15
1 00:15:00
2 02:27:00
3 00:41:00
你能用 dtype 找出列中值的类型吗?如果它们不是日期类型,您将无法比较。
您的第二次尝试几乎成功...但是,如异常中所述,您无法比较 pd.Timedelta < int
,在这种情况下 0
是整数。
您可以使用
修复它df.loc[df["difference"] < pd.Timedelta(0), "difference"]=df["difference"] + pd.Timedelta(days=1)