【问题标题】:Converting two date formats in one format pandas将两种日期格式转换为一种格式熊猫
【发布时间】:2018-11-17 13:57:41
【问题描述】:

将 pandas 数据框中的两种日期格式转换为一种最简单的方法是什么? 以下是我的意见

import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/16 ', 1: '26/1/2016 '}})

预期输出:

       DOB
0   26/1/2016
1   26/1/2016

我需要保持相同的日期格式。

跟随 cmets 并使用 pd.to_datetime

pd.to_datetime(df.DOB)

输出:

0   2016-01-26
1   2016-01-26

这很好,但我想保留%d/%m/%Y的原始格式

我在执行 pd.to_datetime 后尝试使用格式参数

df.DOB=pd.to_datetime(df.DOB,format="%d/%m/%Y")

它似乎并没有改变格式。 输出:

0   2016-01-26
1   2016-01-26

如果我直接在下面执行以提供格式,它会给出错误,因为输入的格式不同

df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '}})
df.DOB=pd.to_datetime(df.DOB,format="%d/%m/%Y")

错误:

ValueError: unconverted data remains:  

长话短说我怎样才能保留原来的日期格式

【问题讨论】:

  • pd.to_datetime(df.DOB, errors='coerce') 就这样工作
  • pd.to_datetime(df['DOB']) 可以。
  • 但是在这种格式中,如果他们有一个像 6/1/16 这样的日期,pd.to_datetime(df['DOB']) 会读作 6 月 1 日,而不是 1 月 6 日
  • 我想保留格式。 pd._to_datetime 会给我输入格式以外的两种格式的日期。当我将格式作为参数给出时,它会引发错误@HarvIpan
  • @jpp 我现在解释得更清楚了。

标签: python pandas datetime


【解决方案1】:

您的日期字符串中有空格。在调用pd.to_datetime 之前使用pd.Series.str.strip 以保证您不会出错。

选项 1:不指定格式

这里你甚至不需要去掉空格:

df = pd.DataFrame({'DOB': {0: '26/1/16 ', 1: '26/1/2016 '}})

df.DOB = pd.to_datetime(df.DOB)

print(df)

         DOB
0 2016-01-26
1 2016-01-26

选项 2:在指定格式之前剥离

只有在您事先知道日期的具体格式时才提供format。如果这样做,则需要事先使用pd.Series.str.strip

df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '}})

df.DOB = pd.to_datetime(df.DOB.str.strip(), format='%d/%m/%Y')

print(df)

         DOB
0 2016-01-26
1 2016-01-26

【讨论】:

  • 空格可能是错字,但我仍然看不到正确格式的输出。
  • @mad_,对不起,我虽然你给了minimal reproducible example。不幸的是,在您提供问题之前,我无法确定..
  • 我已经提供了上面所有的场景。我需要%d/%m/%Y'. Your output is of format %Y-%d-%d`格式的数据`
  • 使用df['DOB'] = df['DOB'].dt.strftime('%d/%m/%Y') 作为最后一步。
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多