【问题标题】:Pandas: Multiple date formats in one columnPandas:一列中有多种日期格式
【发布时间】:2020-07-20 11:32:59
【问题描述】:

我在一个 Pandas 系列(列)中有两种日期格式,需要标准化为一种格式(mmm dd & mm/dd/YY)

日期

1 月 3 日

1 月 2 日

1 月 1 日

19 年 12 月 31 日

19 年 12 月 30 日

19 年 12 月 29 日

即使 Excel 也无法将 mmm dd 格式识别为日期格式。我可以使用 str.replace 将 mmm 更改为完整的月份:

df['Date'] = df['Date'].str.replace('Jan', 'January', regex=True)

但是如何添加当前年份?然后如何将 2020 年 1 月 1 日转换为 01/01/20?

【问题讨论】:

    标签: python pandas python-datetime


    【解决方案1】:

    你试过 parse()

    from dateutil.parser import parse
    import datetime
    
    def clean_date(text):
      datetimestr = parse(text)
      text = datetime.strptime(datetimestr, '%Y%m%d')
      return text
    
    df['Date'] = df['Date'].apply(clean_date)
    df['Date'] = pd.to_datetime(df['Date']) 
    

    【讨论】:

    • 我收到此错误:解析器必须是字符串或字符流,而不是系列。我需要解析整个 Pandas 系列,但实际上只有日期格式错误的行。
    • 立即查看答案
    【解决方案2】:

    如果它在数据框中,请使用:

    from dateutil.parser import parse
    import pandas as pd
    
    for i in range(len(df['Date'])):
        df['Date'][i] = parse(df['Date'][i])
    df['Date'] = pd.to_datetime(df['Date']).dt.strftime("%d-%m-%Y")
    

    【讨论】:

    • 谢谢。 df['Date'] 系列是 datetime64[ns] 类型。在运行代码之前,我首先将其转换为字符串: df['Date'] = df['Date'].astype(str) 。一旦我这样做了,我得到了这个错误: :5: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 请参阅文档中的警告:pandas.pydata.org/pandas-docs/stable/user_guide/… df ['日期'][i] = 解析(df['日期'][i])
    【解决方案3】:

    找到解决方案(需要使用apply):

    df['date'] = df['date'].apply(dateutil.parser.parse)
    

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 2016-03-27
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2022-10-07
      相关资源
      最近更新 更多