熊猫,将日期时间格式mm / dd / yyyy转换为dd / mm / yyyy

时间:2018-10-18 08:09:28

标签: python pandas date datetime

csv的默认格式为dd / mm / yyyy。当我将df['Date']=pd.to_datetime(df['Date'])转换为datetime时,它将格式更改为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']))时,它恢复为以前的格式。需要您的帮助

3 个答案:

答案 0 :(得分:2)

您可以使用parse_dates的{​​{1}}和dayfirst参数,请参阅:the docs for read_csv()

pd.read_csv

这将把df = pd.read_csv('myfile.csv', parse_dates=['Date'], dayfirst=True) 列读取为日期时间值,正确地将输入的日期的第一部分作为日期。请注意,通常,您希望将日期存储为datetime对象。

然后,如果您需要将日期输出为字符串,则可以调用Date

dt.strftime()

答案 1 :(得分:1)

  

当我再次使用以下代码:df['Date'] = pd.to_datetime(df['Date'])时,它将恢复为以前的格式。

,您不能同时具有您选择的字符串格式和保持类型datetime的系列。如here所述:

  

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

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

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

     

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

答案 2 :(得分:0)

此解决方案适用于列具有混合日期格式的所有情况。如果需要,可以向函数添加更多条件。熊猫的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')