如何使用null将字符串转换为datetime – python,pandas?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用null将字符串转换为datetime – python,pandas?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1729字,纯文字阅读大概需要3分钟。
内容图文
![如何使用null将字符串转换为datetime – python,pandas?](/upload/InfoBanner/zyjiaocheng/708/b7c0a92b260646d2bb9fa0285cfbd2d6.jpg)
我有一个系列有一些日期时间(作为字符串)和一些空值为’nan’:
import pandas as pd, numpy as np, datetime as dt
df = pd.DataFrame({'Date':['2014-10-20 10:44:31', '2014-10-23 09:33:46', 'nan', '2014-10-01 09:38:45']})
我正在尝试将这些转换为日期时间:
df['Date'] = df['Date'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
但我得到错误:
time data 'nan' does not match format '%Y-%m-%d %H:%M:%S'
所以我试着把它们变成实际的空值:
df.ix[df['Date'] == 'nan', 'Date'] = np.NaN
并重复:
df['Date'] = df['Date'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
但后来我得到了错误:
must be string, not float
解决这个问题的最快方法是什么?
解决方法:
只需使用to_datetime并设置errors =’coerce’来处理duff数据:
In [321]:
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
df
Out[321]:
Date
0 2014-10-20 10:44:31
1 2014-10-23 09:33:46
2 NaT
3 2014-10-01 09:38:45
In [322]:
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 3
Data columns (total 1 columns):
Date 3 non-null datetime64[ns]
dtypes: datetime64[ns](1)
memory usage: 64.0 bytes
调用strptime的问题是,如果字符串或dtype不正确,它将引发错误.
如果你这样做,那么它会工作:
In [324]:
def func(x):
try:
return dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
except:
return pd.NaT
df['Date'].apply(func)
Out[324]:
0 2014-10-20 10:44:31
1 2014-10-23 09:33:46
2 NaT
3 2014-10-01 09:38:45
Name: Date, dtype: datetime64[ns]
但是使用内置的to_datetime会更快,而不是调用apply,它实际上只是循环遍历你的系列.
计时
In [326]:
%timeit pd.to_datetime(df['Date'], errors='coerce')
%timeit df['Date'].apply(func)
10000 loops, best of 3: 65.8 μs per loop
10000 loops, best of 3: 186 μs per loop
我们在这里看到使用to_datetime的速度提高了3倍.
内容总结
以上是互联网集市为您收集整理的如何使用null将字符串转换为datetime – python,pandas?全部内容,希望文章能够帮你解决如何使用null将字符串转换为datetime – python,pandas?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。