【问题标题】:Convert from MM/DD/YYYY to DD-MM-YYY [duplicate]从 MM/DD/YYYY 转换为 DD-MM-YYY [重复]
【发布时间】:2017-03-03 18:17:59
【问题描述】:

我在 csv 文件中有一些数据,其中有一些 MM/DD/YYYY 格式的条目和一些 DD-MM-YYYY 格式的条目。我想阅读这列条目并将其作为新列存储在 pandas 数据框中?我该怎么办?

例子:

    Entry        Sampling Date
     1            01-10-2004
     2            01-13-2004
     3            16/1/2004

我想将前两行的日期格式转换为第三行的日期格式。

【问题讨论】:

  • .replace("/","-")?
  • @WhatsThePoint: 并交换月份和日期..
  • @MartijnPieters 是的,我错过了
  • 请检查重复的答案,可能只需将format='%d/%m/%Y' 更改为format='%m/%d/%Y'。如果有问题,请告诉我,我可以删除重复框
  • @jezrael 我收到了一些作为 NaT 的条目。问题似乎是没有完整提及年份。 2004 年 1 月 3 日是 03-01-04。

标签: python pandas


【解决方案1】:

使用datetime 模块,定义一个函数,然后将其应用于您的列

import datetime.datetime 

def read_date(string):
    if '/' in entry:
        date = datetime.datetime.strptime(string,'%m/%d/%Y')
    elif '-' in entry:
        date = datetime.datetime.strptime(string, '%d-%m-%Y')
    return date

# If df is your dataframe
df['newdate'] = df['Sampling Date'].apply(read_date)

【讨论】:

  • 我认为这会奏效。但是,正如我在上面的评论中提到的那样,没有完整提到年份,2004 年 1 月 3 日写为 03-01-04。这给了我错误。
  • 这不是您在示例中显示的内容...然后只需将 %Y 替换为 %y 即可。显然,如果你有一些截断年份的行和其他完整年份的行,你将不得不创建一个 if 子句来选择解析的方式
  • 是的,我意识到这不是我在示例中展示的内容。我的错。感谢你的回答。现在可以使用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多