问题描述
我有一个数据框,我在其中获得了两个不同小时之间的差异列(在下面的示例中):
array([[-3.68962631e+01],[ 4.36777472e-01],[ 9.44449380e-03],[-1.07348785e-01],[ 6.44962370e-01],[-3.94082872e-06],[-3.78797273e-03],[-4.20847952e-01],[-4.34020907e-01]],dtype=float32)
这些值被标记为timedelta类型。那么,如何只为那些负值添加一天(使差值变为正值)?我试图做:
difference
00:30:15
00:15:00
-1 days +02:27:00
-1 days +00:41:00
(引号标记为零,因为否则不接受,不知道为什么)
输出:
TypeError:“ DataFrame”对象是可变的,因此不能被散列
然后我尝试:
mask=df[df["difference"]<"0"]
df[mask,"difference"]=df["difference"] + pd.timedelta(days=1)
输出:
所以,我不知道还能做什么。我在这里回顾了很多问题,但到目前为止,没有一个问题对我有帮助。任何想法都欢迎。
解决方法
尝试一下:
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)