【问题标题】:Different format in pandas date column - data type of column vs. row熊猫日期列中的不同格式 - 列与行的数据类型
【发布时间】:2019-05-09 08:21:48
【问题描述】:

我有一个 pd DataFrame 列,其中包含不同格式的日期值。例如“YYYY-MM-DD hh:mm:ss”和“DD.MM.YYYY”甚至是“DD.MM”。我想将它们全部转换为一种格式(例如,'YYYY-MM-DD')并尝试过(在很多事情中)

df[~df.date.str.contains('(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})')] 

查找日期未写为“YYYY-MM-DD hh:mm:ss”的行。但是,这不起作用。

因此我检查了列的类型

df['date'].dtype   #prints dtype('O')

然后我检查了

for index, row in df.iterrows():
    print(type(row['date']))

并收到混合打印,例如“datetime.datetime”类和“str”类

我很困惑。当列是“对象”数据类型时,为什么我不总是得到“str”?有没有人知道如何使正则表达式工作?

【问题讨论】:

  • 我想将它们全部转换为一种格式 - 哪一种?
  • 一种方法是将它们转换为日期时间对象,你可以决定我猜的格式......
  • @PedroLobito 最好是 YYYY-MM-DD。我已经编辑了我的帖子
  • 那么,您想将哪一年分配给 DD.MM 日期?这是它无法自动解析的唯一格式,因此如果您只是修改这些字符串并添加年份,则调用 pd.to_datetime 将转换所有内容
  • 如果您确定格式始终为 DD.MM,例如,您可以使用df.loc[df.date.str.len() == 5, 'date'] += '.2017'。如果它可能是 D.M,那么可能会成为 < 5

标签: python regex pandas date types


【解决方案1】:
def findIndex(x):
    try:
        pd.to_datetime(x).strftime('%m/%d/%Y')
        return
    except:
        return True


df.date.apply(lambda x: findIndex(x))

现在您可以获取所有具有奇怪格式的索引。希望这会有所帮助。

【讨论】:

  • 我之前实际上尝试过,但只收到错误“ValueError: ('Unknown string format:', '01.01.')”,因为如帖子中所述,有些年份缺少年份。这就是为什么我想将数据框过滤到具有奇怪格式的数据框并“手动”添加缺失的年份
  • 改用df.date.apply(lambda x: pd.to_datetime(x, errors='coerce').strftime('%m/%d/%Y')[0])
  • 你可以用你的函数代替 lambda func。使用 try/catch 块并尝试几种日期时间格式。
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多