【问题标题】:Mixed dates in column列中的混合日期
【发布时间】:2022-01-12 21:53:51
【问题描述】:

使用 Pandas:我有一个非常大的数据框,其中一列(从许多 .csv 和 .xlsx 文件导入)具有不同格式的混合日期。我设法统一了所有分隔符 /.- 但仍然无法将日期 YYYY/MM/DD 和 DD/MM/YYYY 统一为其中之一(与哪个不真正相关)。

我在一个非常大的 DataFrame 中有一个列:

Date
15-11-2021
2021-11-11
2021-11-20
19-11-2021
...

我需要:

Date
15-11-2021
11-11-2021
20-11-2021
19-11-2021
...

我尝试了旧问题的解决方案。 502726 和没有。 49435438 但没用

像这样:

datetime.datetime.strptime(df['Date'], "%d-%m-%Y").strftime("%Y-%m-%d")

但报错:AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

或者函数定义:

new_date_format='%Y-%m-%d'
old_date_format='%d-%m-%Y'
def conv_dates_series(df, col, old_date_format, new_date_format):
    df[col] = pd.to_datetime(df[col], format=old_date_format).dt.strftime(new_date_format)
    return df

但是当发现意外的正确格式时很快返回错误(可能 if/then 子句在这里会有所帮助,但我不知道如何与 to_datetime(format) 一起使用。

有什么想法吗?谢谢!

【问题讨论】:

    标签: python pandas date


    【解决方案1】:

    您可以简单地使用pd.to_datetime 并让 Pandas 推断出正确的格式:

    >>> pd.to_datetime(df['Date'])
    0   2021-11-15
    1   2021-11-11
    2   2021-11-20
    3   2021-11-19
    Name: Date, dtype: datetime64[ns]
    

    转换成字符串:

    >>> pd.to_datetime(df['Date']).astype(str)
    0   2021-11-15
    1   2021-11-11
    2   2021-11-20
    3   2021-11-19
    Name: Date, dtype: object
    

    【讨论】:

    • 确实很优雅,谢谢!
    • 由于我的名声这么低,我的投票不给分。我现在再试一次。
    • @GuillermoDC。在您的情况下,您不需要使用dt.strftime,像.astype(str) 这样的简单转换效果很好。
    • 我想你可以accept an answer
    • 确实如此。谢谢。我愿意接受两者,因为两者都有效!
    【解决方案2】:

    假设Date 列值是字符串(并假设没有像%Y-%d-%m 这样的奇怪格式),我可以简单地使用pd.Timestamp

    In [4]: df
    Out[4]:
             Date
    0  15-11-2021
    1  2021-11-11
    2  2021-11-20
    3  19-11-2021
    
    In [5]: df["Date"].apply(pd.Timestamp)
    Out[5]:
    0   2021-11-15
    1   2021-11-11
    2   2021-11-20
    3   2021-11-19
    Name: Date, dtype: datetime64[ns]
    

    或者,您可以使用pd.to_datetime(df["Date"])

    【讨论】:

      【解决方案3】:

      终于找到了解决办法,比较简单:

      df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%m-%d')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        • 2021-07-10
        • 1970-01-01
        相关资源
        最近更新 更多