【发布时间】: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