当前位置: 首页 > 面试题库 >

如何将字符串转换为具有null的datetime-python,pandas?

通典
2023-03-14
问题内容

我有一些日期时间(如字符串)和一些空值作为“ 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编码进行转义,当我搜索文件时,我找不到它们,因为它搜索名称中带有名字的文件。 问题答案: 从技术上讲: 自动将其转换为,因此我假设你正在从某个文件中读取字符串。为了将其转