如何在pandas中将字符串转换为日期时间格式?

115
我在一个名为“train”的数据框中有一个名为“I_DATE”的字符串(对象)类型的列,如下所示。
I_DATE
28-03-2012 2:15:00 PM
28-03-2012 2:17:28 PM
28-03-2012 2:50:50 PM

如何将字符串格式的I_DATE转换为日期时间格式,并指定输入字符串的格式。
另外,在pandas中如何根据日期范围筛选行?

简而言之,pandas.to_datetime 是与时间格式相关的编程函数。然而需要注意的是,并非所有的时间格式都能被正确解析。你可能需要查看关键字 dayfirst 或设置一个 format - FObersteiner
3个回答

183

使用 to_datetime。不需要格式字符串,因为解析器可以处理它:

In [51]:
pd.to_datetime(df['I_DATE'])

Out[51]:
0   2012-03-28 14:15:00
1   2012-03-28 14:17:28
2   2012-03-28 14:50:50
Name: I_DATE, dtype: datetime64[ns]

要访问日期/天/时间组件,请使用dt访问器:

In [54]:
df['I_DATE'].dt.date

Out[54]:
0    2012-03-28
1    2012-03-28
2    2012-03-28
dtype: object

In [56]:    
df['I_DATE'].dt.time

Out[56]:
0    14:15:00
1    14:17:28
2    14:50:50
dtype: object

您可以使用字符串作为过滤器,例如:

In [59]:
df = pd.DataFrame({'date':pd.date_range(start = dt.datetime(2015,1,1), end = dt.datetime.now())})
df[(df['date'] > '2015-02-04') & (df['date'] < '2015-02-10')]

Out[59]:
         date
35 2015-02-05
36 2015-02-06
37 2015-02-07
38 2015-02-08
39 2015-02-09

21

方法:1

给定原始的string格式:2019/03/04 00:08:48

可以使用

updated_df = df['timestamp'].astype('datetime64[ns]')

结果将以此datetime格式呈现:2019-03-04 00:08:48

方法:2

updated_df = df.astype({'timestamp':'datetime64[ns]'})

5

对于AM/PM格式的日期时间,时间格式为'%I:%M:%S %p'。在https://strftime.org/上查看所有可能的格式组合。请注意,如果您有OP中的时间组件,则如果传递format=参数(有关更多信息,请参见此处),转换速度会快得多。

df['I_DATE'] = pd.to_datetime(df['I_DATE'], format='%d-%m-%Y %I:%M:%S %p')

要使用范围过滤日期时间,您可以使用 query

df = pd.DataFrame({'date': pd.date_range('2015-01-01', '2015-04-01')})
df.query("'2015-02-04' < date < '2015-02-10'")

或者使用between创建掩码并过滤。

df[df['date'].between('2015-02-04', '2015-02-10')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接