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