【问题标题】:Pandas, convert datetime format mm/dd/yyyy to dd/mm/yyyyPandas,将日期时间格式 mm/dd/yyyy 转换为 dd/mm/yyyy
【发布时间】:2023-03-15 19:50:01
【问题描述】:

csv 的默认格式是 dd/mm/yyyy。当我通过df['Date']=pd.to_datetime(df['Date']) 将其转换为日期时间时,它会将格式更改为 mm//dd/yyyy。

然后,我使用df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%d/%m/%Y') 转换为dd/mm/yyyy,但是,它们是字符串(对象)格式。但是,我需要将它们更改为datetime 格式。当我再次使用这个 (df['Date']=pd.to_datetime(df['Date'])) 时,它会恢复到以前的格式。需要你的帮助

【问题讨论】:

  • 不,在 python 中,如果需要 datetimes 对象,这是不可能的。
  • 那么,如果我想要新格式,如何解决这个问题?
  • 你试过pd.to_datetimeformat参数吗?
  • @MohitMotwani,是的,但没有区别

标签: python pandas date datetime


【解决方案1】:

您可以使用pd.read_csvparse_datesdayfirst 参数,请参阅:the docs for read_csv()

df = pd.read_csv('myfile.csv', parse_dates=['Date'], dayfirst=True)

这会将Date 列读取为日期时间值,正确地将日期输入的第一部分作为日期。请注意,通常您希望将日期存储为日期时间对象。

然后,如果您需要将日期输出为字符串,您可以调用dt.strftime():

df['Date'].dt.strftime('%d/%m/%Y')

【讨论】:

  • 不,这不起作用 - ARGHHH python 令人沮丧。
  • 如果您的文件有 mm/dd/yy 则将 dayfirst 设置为 False
【解决方案2】:

此解决方案适用于列具有混合日期格式的所有情况。如果需要,向函数添加更多条件。 Pandas to_datetime() 函数对我不起作用,但这似乎很好用。

import date
def format(val):
    a = pd.to_datetime(val, errors='coerce', cache=False).strftime('%m/%d/%Y')
    try:
        date_time_obj = datetime.datetime.strptime(a, '%d/%m/%Y')
    except:
        date_time_obj = datetime.datetime.strptime(a, '%m/%d/%Y')
    return date_time_obj.date()

将更改保存到同一列。

df['Date'] = df['Date'].apply(lambda x: format(x))

另存为 CSV。

df.to_csv(f'{file_name}.csv', index=False, date_format='%s')

【讨论】:

    【解决方案3】:

    当我再次使用 df['Date'] = pd.to_datetime(df['Date']) 时,它会恢复到以前的格式。

    ,您不能同时拥有您选择的字符串格式并保留您的系列类型datetime。正如here所说:

    datetime 系列在内部存储为整数。任何 人类可读的日期表示就是这样,一个表示, 不是基础整数。要访问您的自定义格式,您可以 使用 Pandas 中可用的方法。你甚至可以存储这样的文本 pd.Series 变量中的表示:

    formatted_dates = df['datetime'].dt.strftime('%m/%d/%Y')
    

    formatted_datesdtype 将是object,这表示 您的系列的元素指向任意 Python 时间。在 在这种情况下,那些任意类型恰好都是字符串。

    最后,我强烈建议您不要转换datetime 系列 到字符串,直到工作流程的最后一步。这是因为 一旦这样做,您将不再能够使用高效, 对此类系列进行矢量化操作。

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多