Python 将datetime转换为其他格式而不更改数据类型

Python 将datetime转换为其他格式而不更改数据类型,python,python-3.x,pandas,datetime,series,Python,Python 3.x,Pandas,Datetime,Series,我自己也只是在学习熊猫,遇到了一些问题 在从csv文件读取的数据框中,我有一列包含不同格式的日期数据(如'%m/%d/%Y'和'%Y-%m-%d',可能为空)。我希望统一此列的格式。但我不知道是否还有其他格式。因此,当我使用pd.to_datetime()时,它会引发一些错误,例如格式不匹配和数据不符合时间。如何统一本专栏的格式 我已经将该列的一部分转换为datetime数据类型,它采用YYYY-mm-dd格式。我是否可以保留日期时间数据类型,并将格式更改为'%m/%d/%Y'?我使用了pd.d

我自己也只是在学习熊猫,遇到了一些问题

  • 在从csv文件读取的数据框中,我有一列包含不同格式的日期数据(如
    '%m/%d/%Y'
    '%Y-%m-%d'
    ,可能为空)。我希望统一此列的格式。但我不知道是否还有其他格式。因此,当我使用
    pd.to_datetime()
    时,它会引发一些错误,例如格式不匹配和数据不符合时间。如何统一本专栏的格式

  • 我已经将该列的一部分转换为datetime数据类型,它采用
    YYYY-mm-dd
    格式。我是否可以保留日期时间数据类型,并将格式更改为
    '%m/%d/%Y'
    ?我使用了
    pd.dt.strftime()
    ,它将更改格式,但也将数据类型更改为str,而不保留日期时间数据类型

  • 因此,当我使用pd.to_datetime()时,它引发了一些错误,如格式错误 匹配而非时间型数据。我该如何统一此文件的格式 专栏

    使用
    errors='concurve'
    选项,为未转换的值返回
    NaT
    (非时间)。还要注意,
    格式
    参数不是必需的。省略它将使Pandas能够尝试多种格式,如果失败,它将恢复为
    NaT
    1。例如:

    df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')
    
    注意,混合类型可能会被错误地解释。例如,Python如何知道2018年6月5日是6月5日还是5月6日?将应用约定顺序,如果您需要更大的控制,您需要自己应用自定义顺序

    我是否可以保留datetime数据类型,并将格式更改为“%m/%d/%Y”

    不,你不能<代码>日期时间序列在内部存储为整数。任何人类可读的日期表示形式都只是表示形式,而不是基础整数。要访问自定义格式,可以使用Pandas中提供的方法。您甚至可以将这样的文本表示存储在
    pd.Series
    变量中:

    formatted_dates = df['datetime'].dt.strftime('%m/%d/%Y')
    
    格式化日期的
    dtype
    将是
    object
    ,这表示序列中的元素指向任意Python时间。在这种情况下,这些任意类型恰好都是字符串

    最后,我强烈建议您不要将
    datetime
    系列转换为字符串,直到工作流的最后一步。这是因为一旦这样做,您将无法再对此类序列使用有效的向量化操作



    1这将牺牲性能和对比度,这需要指定格式。熊猫在内部使用库,如图所示。

    谢谢!我知道我可以在参数中使用
    errors='compresse'
    ,但它会将所有其他不适合默认输入的输入更改为
    Nat
    。例如,如果我有两种格式,如
    '%m/%d/%Y'
    '%Y-%m-%d'
    ,如果我设置
    格式='%m/%d/%Y'
    ,另一种格式将是
    Nat
    ,我希望它也转换为统一格式。有什么可能的解决办法吗?谢谢大家!@MapleYu,是的,您不需要指定
    格式
    。这不是
    pd.to\u datetime
    的必需参数。例如,
    pd.to_datetime(pd.Series(['15/12/2018','12/15/2018']),errors='concurve')
    将被正确读取。