仅添加到数据框列中的负天数

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)