【问题标题】:Working with mixed datetime formats in pandas在 pandas 中使用混合日期时间格式
【发布时间】:2020-06-08 18:44:13
【问题描述】:

我将一个文件读入 pandas 数据框中,其日期格式各不相同:

  • 任一美国人:YYYY-MM-DD

  • 或欧洲人:DD.MM.YYYY

它们以字符串的形式出现。我想将它们全部格式化为日期对象,以便 pandas.Series.dt 可以使用它们,并且理想情况下将它们设置为第二种格式 (DD.MM.YYYY)。

pandas.Series.dt 对一列中的两种不同拼写感到困惑。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    to_datetime分别与两种格式一起使用,因此如果格式不匹配,则获取缺失值,因此对于新列使用Series.fillna

    df = pd.DataFrame({'date': ['2000-01-12', '2015-01-23', '20.12.2015', '31.12.2009']}) 
    print (df)
             date
    0  2000-01-12
    1  2015-01-23
    2  20.12.2015
    3  31.12.2009
    
    date1 = pd.to_datetime(df['date'], errors='coerce', format='%Y-%m-%d')
    date2 = pd.to_datetime(df['date'], errors='coerce', format='%d.%m.%Y')
    df['date'] = date1.fillna(date2)
    print (df)
            date
    0 2000-01-12
    1 2015-01-23
    2 2015-12-20
    3 2009-12-31
    

    最好采用第二种格式

    python/pandas 中的日期时间格式默认为YYYY-MM-DD,如果需要自定义也可以,但是值会转换为字符串,所以类日期时间函数失败:

    df['date'] = df['date'].dt.strftime('%d.%m.%Y')
    print (df)
             date
    0  12.01.2000
    1  23.01.2015
    2  20.12.2015
    3  31.12.2009
    
    print (type(df.loc[0, 'date']))
    <class 'str'>
    

    【讨论】:

      【解决方案2】:

      只需检查您拥有两种格式中的哪一种,然后使用该格式应用pandas.to_datetime

      df = pd.DataFrame({'date': ['2000-01-12', '2015-01-23', '20.12.2015', 
      '31.12.2009']}) 
      print(df)
               date
      0  2000-01-12
      1  2015-01-23
      2  20.12.2015
      3  31.12.2009
      
      def date_formator(date):
      
          if '-' in date:
              return pd.to_datetime(date, format = '%Y-%m-%d')
          else:
              return pd.to_datetime(date, format = '%d.%m.%Y')
      
      df.date.apply(date_formator)
      0   2000-01-12
      1   2015-01-23
      2   2015-12-20
      3   2009-12-31
      Name: date, dtype: datetime64[ns]
      

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 2021-11-04
        相关资源
        最近更新 更多