5

我正在尝试将包含日期的列识别为字符串,以便将它们转换为更好的类型(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 时间戳?

4

2 回答 2

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 转换为时间戳...*

于 2013-09-13T01:44:15.517 回答
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')
于 2013-09-13T01:59:32.683 回答