【问题标题】:handling dates in pandas在熊猫中处理日期
【发布时间】:2020-02-21 08:06:49
【问题描述】:

我正在使用 pandas 读取一个 csv 文件,而 csv 有日期列,它是字符串和整数的混合,并按升序排列,示例如下:

Date 
Dec 01 2010 
40513 
12/1/10 
12/1/10 9:00 
40513

尝试以下代码忽略不作为日期的值,

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')

print(df.tail(20))
Date
2010-12-01 00:00:00.000
NULL
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
NULL

我想将“30-12-1899”这个日期添加到数字中,例如 df['Date'] = pd.to_datetime('30-12-1899') + pd.DateOffset(df['Date']) 并希望我的结果是:

Date
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000
2010-12-01 00:00:00.000

【问题讨论】:

  • 我的解决方案效果如何?
  • 它按预期工作,谢谢

标签: python pandas date datetime


【解决方案1】:

想法是将日期时间转换为Series 称为date,然后过滤未解析的日期时间并添加DateOffset,最后使用Series.combine_firstSeries.fillna 替换缺失值:

dates = pd.to_datetime(df['Date'],errors='coerce')
dates1 = (df.loc[dates.isna(), 'Date'].apply(lambda x: pd.DateOffset(days=int(x))) + 
                                                            pd.to_datetime('30-12-1899'))

df['Date'] = dates.combine_first(dates1)
print (df)
                 Date
0 2010-12-01 00:00:00
1 2010-12-01 00:00:00
2 2010-12-01 00:00:00
3 2010-12-01 09:00:00
4 2010-12-01 00:00:00

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 2021-10-15
    • 2017-08-03
    • 2021-05-31
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多