【发布时间】:2016-02-01 18:21:12
【问题描述】:
我有 csv 文件,其中每一行都是这种格式:
(moon_phase)\t(year) (month) (day) (time)
例如:
new moon\t2011 Jan 04 09:03
first quarter\t2011 Jan 12 11:31
我想使用 pandas 的 read_csv() 来打开文件,并想出一个这样的表格:
|moon_phase |date |time |
|--------------|-----------|-----|
|new moon |2011 Jan 04|09:03|
|first quarter |2011 Jan 12|11:31|
但是,当我使用带有值 "\t|(?:\d)( )(?:\d)" 的 read_csv 参数 sep 来拆分制表符空间中的行(以分隔月相和日期)和使用非捕获组的正则表达式(以分隔日期和时间),结果是:
|New Moon |NaN|2011 Jan 0| |9:03|
|First Quarter|NaN|2011 Jan 1| |1:31|
我想在匹配中使用月份的day 和hour,但分隔符应该只指它们之间的空格来分隔日期和时间。这如何在正则表达式中完成?
【问题讨论】:
-
是的,我真的是指
|的 OR,因为我想使用"\t"或每月的day和hour之间的空格来分割行时间。 -
04将使用\d+进行匹配。由于您只使用了一个\d,它只匹配0。时间也是如此。 -
我还是得到了
|new moon|NaN|2011 Jan| |:03 -
不捕获并不意味着不消耗。如果您的组匹配
\d,则它匹配的数字将不是返回数据的一部分(因为它将是列分隔符的一部分)。我建议您在\t上拆分并在整个日期时间中读取单个列,然后在读取后将其单独拆分为日期/时间。 -
是的,那将是下一步,我只是想知道是否可以使用 read_csv 和正则表达式解析该行并获得一些更清晰和单行的代码,谢谢@BrenBarn跨度>