我有一个手术活动的数据框架,包括入院日期(ADMIDATE)和出院日期(DISDATE)。它是600k行乘78列,但我对它进行了过滤,以用于特定的手术。我想计算逗留的时间并将其添加为另一列。通常我用
df["los"] = (df["DISDATE"] - df["ADMIDATE"]).dt.days
我最近必须清理数据,并且必须以与以前不同的方式完成,因为我现在得到负损失,例如
DISDATE. | 。th ADMIDATE。 <>。洛杉矶。 | 2019-12-24 | 2019-12-08 | -43805。 |
---|---|---|
2019-05-15 | 。50 2019-03-26 | 。 |
2019-10-11 | 。2019-10-07 | 4。 |
2019-06-20 | 2019-06-16 | 4 |
2019-04-11 | 2019-04-08 | 3 |
您的示例在正确的输出(第一行为16天)下运行良好
你可以试一下,看看问题是否仍然存在:
import io
data = df[['DISDATE', 'ADMIDATE']].to_csv()
test = pd.read_csv(io.StringIO(data), index_col=0,
parse_dates=['DISDATE', 'ADMIDATE'])
print(test['DISDATE'].sub(test['ADMIDATE']).dt.days)
输出:
0 16
1 50
2 4
3 4
4 3
dtype: int64
要调试你的坏日期,试试:
df.loc[pd.to_datetime(df['ADMIDATE'], errors='coerce').isna(), 'ADMIDATE']
您应该看到值不是正确日期的行。