gpt4 book ai didi

python - 将负日期时间转换为 NaT

转载 作者:行者123 更新时间:2023-11-28 21:41:04 25 4
gpt4 key购买 nike

我有两列:“asked”和“answered”,但是“answered”是一个对象,而“asked”是 datetime64[ns]。所以我将“answered”转换为 Datetime:

df['answered'] = pd.to_datetime(df['answered'])

index, asked, answered
0 2016-07-04 07/07/2016
1 2016-07-03 07/01/2016
2 2016-07-05 07/09/2016
3 NaT NaN

然后,我制作了第 3 列,给出了两者之间的时间差:

df['Days']= df['answered'] - df['asked']

index, asked, answered, Days
0 2016-07-04 07/07/2016 3 days
1 2016-07-03 07/01/2016 -2 days
2 2016-07-05 07/09/2016 4
3 NaT NaN NaT

在@piRSquared 的帮助下,我试图将负天数转换为 NaT,但是当我这样做时没有任何反应:

df.update(df[['Days']].mask(df < 0))

我怎样才能把消极的日子变成 NaT?

最佳答案

使用mask

df.mask(df < 0)

Days col2
index
0 20 days NaT
1 61 days 78 days
2 NaT 10 days

pd.DataFrame.mask 采用 bool 值数组,标识要屏蔽的位置。如果传递了可选的第二个参数,它将用可选参数中指定的值替换标识位置中的值。如果没有传递该参数,就像在我提出的解决方案中一样,那么标识的值将被替换为空值。由于这些列的 dtypestimedelta,因此相应的空值将是 NaT


假设您的数据框包含许多列。您可以只关注您关心的特定列。

df[['Days', 'col2']].mask(df < 0)

然后你可以就地更新df

df.update(df[['Days', 'col2']].mask(df < 0))

假设您想获取所有时间增量的列

df.select_dtypes([np.timedelta]).mask(df < 0)

和更新

df.update(df.select_dtypes([np.timedelta64]).mask(df < 0))

关于python - 将负日期时间转换为 NaT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com