查找包含Pandas中日期的列

时间:2013-09-13 01:34:46

标签: python pandas

我正在尝试识别包含日期为字符串的列,然后将它们转换为更好的类型(DateTime或类似UTC的数字)。使用的日期格式为27/11/2012 09:17,我可以使用\d{2}/\d{2}/\d{4} \d{2}:\d{2}的正则表达式进行搜索。

我目前的代码是:

date_cols = []
df = cleaned_data
date_pattern = re.compile('\d{2}/\d{2}/\d{4} \d{2}:\d{2}')
for column in df:
    if date_pattern.search(str(item)):
        date_cols += [column]
return date_cols

我确信这不会利用pandas的功能。有没有更好的方法,既可以识别列,也可以直接将它们转换为DateTime或UTC时间戳?

2 个答案:

答案 0 :(得分:5)

如果您要转换整列,可以使用convert_objects:

df.convert_objects(convert_dates=True)

要提取列/系列中包含的日期,您可以使用findall:

In [11]: s = pd.Series(['1', '10/11/2011 11:11'])

In [12]: s.str.findall('\d{2}/\d{2}/\d{4} \d{2}:\d{2}')
Out[12]:
0                    []
1    [10/11/2011 11:11]
dtype: object

In [13]: s.str.findall('\d{2}/\d{2}/\d{4} \d{2}:\d{2}').apply(pd.Series)
Out[13]:
                  0
0               NaN
1  10/11/2011 11:11

*然后使用convert_objects ... *

转换为时间戳

答案 1 :(得分:3)

根据您想要的过分热情,to_datetime会将其认为是日期时间的任何内容强制转换为日期时间,包括ints→datetimes(默认为UNIX纪元以来的ns)。

to_datetime让您可以很好地控制如何解释它找到的日期时间。

pandas.to_datetime(arg, errors='ignore', dayfirst=False, utc=None,
                                 box=True, format=None, coerce=False, unit='ns')