【问题标题】:Convert multiple "Object" formats to datetime将多种“对象”格式转换为日期时间
【发布时间】:2021-08-24 06:13:23
【问题描述】:

其中“Financial_Year”列有多种格式的对象。我想将它们标准化为“YYYY”格式,如下所示:

Financial_Year "NEW"_Year
2020-21 2020
2019-20 2019
2013 2013
2009 2009

我尝试使用在此处找到的以下代码,但在我的情况下似乎不起作用:

df['format'] = 1
df.loc[df['Financial_Year'].str.contains('YYYY'), 'format'] = 2
df['Year'] = pd.to_datetime(df['Financial_Year'])

df.loc[df.format == 1, 'Year'] = pd.to_datetime(df.loc[df.format ==1, '%Y-%y'], format = 'YYYY-YY').dt.strftime('%Y-%y')
df.loc[df.format == 2, 'Year'] = pd.to_datetime(df.loc[df.format ==2, '%Y'], format = 'YYYY').dt.strftime('%Y')

这是我得到的错误“ValueError:给定的日期字符串不太可能是日期时间。”

我做了一些其他的互联网搜索,但我还没有找到解决方案。

提前感谢您的帮助。

【问题讨论】:

    标签: python pandas string date


    【解决方案1】:

    您可以使用正则表达式来获得连续出现的四个数字:

    df['New_Year'] = df['Financial_Year'].str.extract('(\d{4})')
    

    输出:

       Financial_Year   New_Year
    0         2020-21       2020
    1         2019-20       2019
    2            2013       2013
    3            2009       2009
    

    【讨论】:

      【解决方案2】:

      我认为解决方案应该通过- 拆分并首先选择year 来简化:

      df['Year'] = df['Financial_Year'].str.split('-').str[0]
      

      如果需要使用日期时间并仅匹配 YYYY-YYYYYY 格式,请使用:

      d1 = pd.to_datetime(df['Financial_Year'], format = '%Y-%y', errors='coerce')
      d2 = pd.to_datetime(df['Financial_Year'], format = '%Y', errors='coerce')
      
      df['Year'] =  d1.fillna(d2).dt.year
      

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 2017-03-08
        • 2021-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2021-10-21
        相关资源
        最近更新 更多