我有一些日期时间(如字符串)和一些空值作为“ 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'
因此,我尝试将其转换为实际的null:
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'))
但是然后我得到了错误:
必须是字符串,而不是浮点数
解决此问题的最快方法是什么?
只需使用to_datetime
并设置errors='coerce'
为处理达芙数据:
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倍。
我已经研究了很多关于如何将PHP DateTime对象转换为String的网站。我总是看到"String to DateTime"而不是"DateTime to String" PHP DateTime可以被回显,但我想用PHP字符串函数处理我的DateTime。 我的问题是,如何使PHP dateTime对象成为从此类代码开始的字符串:
问题内容: 我已经研究了很多站点,有关如何将PHP DateTime对象转换为String。我总是看到“从String到DateTime”而不是“从DateTime到String” 可以回显PHP DateTime,但是我想用PHP字符串函数处理DateTime。 我的问题是如何从这种代码开始使PHP dateTime对象成为字符串: 问题答案: 您可以使用该类的方法: 如果由于某种原因失败,它将
问题内容: 如果我有一个PHP字符串,其格式为(例如10-16-2003),如何正确地将其转换为a ,然后转换为a 的格式?我问两个唯一的原因,并是因为我需要一个在一个地方,和其他在不同的地方。 问题答案: 在第一次约会时使用,然后将其转换回: 请注意,在函数中使用正斜杠和连字符之间是有区别的。引用php.net: 通过查看各个组成部分之间的分隔符,可以消除m/d/y或dmy格式的日期的歧义:如果
问题内容: 因此,在Python 3中,您可以使用.isoformat()生成ISO8601日期,但是由于Python自身的datetime指令不正确,因此您无法将isoformat()创建的字符串转换回datetime对象。也就是说,%z= 0500,而不是05:00(由.isoformat()生成)。 例如: 来自Python的strptime文档:(https://docs.python.o
问题内容: 我有以下日期: 我需要知道这是date在 datetime(2009,04,01) 之前还是之后,而且我似乎找不到找到将字符串转换为可以将其与 datetime(2009,04,01) 比较的 方法。 ) 以一种有意义的方式。 问题答案: 由于该字符串采用ISO格式,因此可以直接将其与您提到的ISO格式版本进行有意义的比较: 如您所见,虽然您无法将字符串与日期时间对象进行比较,但只要字
问题内容: 我有一个带转义Unicode字符的字符串,我想将其转换为常规Unicode字母。例如: 应该成为 我知道当我打印第一个字符串时它已经显示了。我的问题是我从文件中读取文件名,然后搜索它们。文件中的文件名使用Unicode编码进行转义,当我搜索文件时,我找不到它们,因为它搜索名称中带有名字的文件。 问题答案: 从技术上讲: 自动将其转换为,因此我假设你正在从某个文件中读取字符串。为了将其转