【问题标题】:Regular expression to extrat date from columns in a dataframe从数据框中的列中提取日期的正则表达式
【发布时间】:2020-04-10 09:11:34
【问题描述】:

我必须处理一个结构如下所示的数据框:

print (df)
        2012-02-23~2012-02-29  2012-03-01~2012-03-08
Team A                    213                   3213
Team B                    321                   3213

我正在尝试修改列名以提取字符 ~ 之后的日期部分。

df = pd.read_excel('test.xlsx')
df.columns = df.columns.str.extract(r'~(.*)')
df

我正在使用上面的代码,但是我得到的结果如下所示:

print (df)
        (2012-02-29,)  (2012-03-08,)
Team A            213           3213
Team B            321           3213

问题是命令来自哪里?以及为什么每列都有 (),我的目标是让表格如下所示并将日期类型转换为日期戳。

        2012-02-29  2012-03-08
Team A         213        3213
Team B         321        3213

【问题讨论】:

  • 我注意到了,但如果您想提取日期(根据您的问题),请注意 2012-02-35 不是有效日期。这是一个错字吗?还是您在处理错误数据?
  • @JvdV - 我猜,所以在文本版本中我将其更改为 2012-02-29
  • @JvdV 是文本,怎么改成日期时间?
  • 首先,让我们知道这是拼写错误还是您正在处理显示无效日期的错误数据?如果它不是一个有效的日期,它应该是什么?例如2012-2-292012-3-6 等等.. 或者@jezrael 所做的更改是否正确?
  • 这里我觉得pd.to_datetime就够了,我只需要传入格式参数

标签: regex python-3.x pandas


【解决方案1】:

我认为expand=False 应该在这里帮助避免MultiIndex 转换为元组:

df.columns = df.columns.str.extract(r'~(.*)', expand=False)
print (df)
        2012-02-29  2012-03-08
Team A         213        3213
Team B         321        3213

或使用split 选择列表的第二个值:

df.columns = df.columns.str.split('~').str[1]
print (df)
        2012-02-29  2012-03-08
Team A         213        3213
Team B         321        3213

【讨论】:

  • 非常感谢,这很有帮助,还有一个问题,当前结果是字符串,那么如何将列更改为日期时间数据类型?
  • @Rowling - 然后使用df.columns = pd.to_datetime(df.columns.str.extract(r'~(.*)', expand=False))
猜你喜欢
  • 2020-09-13
  • 2023-02-04
  • 2018-01-12
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多