熊猫-将日期转换为日期时间,年月日至年月日均无法解析日期

时间:2020-03-23 18:33:59

标签: python pandas

我有一个包含患者和手术的数据框,其中有6个日期列。日期的格式为 日月年。为了获得住院时间,我需要从出院日期(DISDATE)中减去入院日期[ADMIDATE]。我想将日期列更改为日期时间列。

例如

    ADMIDATE    DISDATE
0   06/06/2014  07/06/2014
1   23/06/2014  23/06/2014

如果使用

pd.read_csv('/Users/.......csv', parse_dates=['ADMIDATE', 'DISDATE'])

我知道

    ADMIDATE    DISDATE
0   2014-06-06  2014-07-06
1   2014-06-23  2014-06-23

和6月7日变为7月6日。(DISDATE,第[0]行) 如果我使用更严格的

for col in ['ADMIDATE', 'DISDATE']:
    df[col] = pd.to_datetime(df[col], format='%d/%m/%Y')

有效

ADMIDATE    DISDATE
0   2014-06-06  2014-06-07
1   2014-06-23  2014-06-23

但是它不会接受许多空行,例如在数据收集时患者尚未出院。我可以在excel中格式化日期列,以将csv转换为年-月-日格式,然后使用解析日期,它可以正常工作,但是我想知道我可以使用to_datetime来做什么。

1 个答案:

答案 0 :(得分:2)

dayfirst

此参数强制解析器首先解释日期

df.apply(pd.to_datetime, dayfirst=True)

    ADMIDATE    DISDATE
0 2014-06-06 2014-06-07
1 2014-06-23 2014-06-23

要指定列:

df[['ADMIDATE', 'DISDATE']].apply(pd.to_datetime, dayfirst=True)

    ADMIDATE    DISDATE
0 2014-06-06 2014-06-07
1 2014-06-23 2014-06-23

error='coerce'

要容纳丢失的数据:

df[['ADMIDATE', 'DISDATE']].apply(
    pd.to_datetime, dayfirst=True, errors='coerce'
)

    ADMIDATE    DISDATE
0 2014-06-06 2014-06-07
1 2014-06-23 2014-06-23