首页 > pandas 阅读数:19

pandas日期转换、日期格式化和日期抽取

pandas 能用很多方式处理日期和时间,日期转换、日期格式化和日期抽取就是其中 3 个常见的功能。

日期转换

日期转换是指将字符型的日期格式的数据转换成为日期型数据的过程。日期转换函数 to_datetime() 的语法格式如下:

pandas.to_datetime(dateString,format)

函数中的参数说明如下:
  • dateString:表示字符型时间列;
  • format:表示时间日期格式,格式代码见表 1。
表 1:时间日期格式代码
代码 注释
%Y 4 位数的年
%y 2 位数的年
%m 2 位数的月,取值范围 [01,12]
%d 2 位数的日,取值范围 [01,31]
%H 小时(24小时制),取值范围 [00,23]
%M 2位数的分钟,取值范围 [00,59]
%S 2位数的秒,取值范围 [00,61],有闰秒
%W 用整数表示的星期几,取值范围 [0(星期天),6]
%F %Y-%m-%d 简写形式,例如 2018-09-20
%D %m/%d/%y 简写形式

日期格式化

日期格式化是将时间日期型数据,按照指定格式,转为字符型数据。日期格式化函数如下:

df_dt.apply(lambda x: datetime.strftime(x, format))

df_dt.dt.strftime(format)

函数中的参数说明如下:
  • df_dt:表示数据框中时间列名;
  • format:表示时间日期格式,见表 1。

日期抽取

日期抽取是指从日期格式中抽取出需要的部分属性。抽取语法如下:

df_dt.dt.property

参数说明如下:
  • df_dt:表示数据框中时间列名;
  • property:表示时间属性,见表 2。
表 2:时间属性
属性 注释
second 秒,取值范围[00,61],有闰秒
minute 分钟,取值范围[00,59]
hour 小时(24小时制),取值范围[00,23]
day 日,取值范围[01,31]
month 月,取值范围[01,12]
year
weekday 用整数表示星期几,取值范围[0(星期天),6]

其示例代码 example1.py 如下。
# -*- coding: utf-8 -*-
import pandas as pd
from datetime import datetime
#导入股票数据
df = pd.read_excel('d:\data\沪深股票股本变动数据.xlsx',
                   sheet_name='sharedata')
#查看df中每个字段数据类型,发现df['日期']是int64
print(df.info())
#将int转换成str
df_date = df['日期'].apply(str)
#用to_datetime()函数将字符串转换成时间格式,并增加'时间'字段
df['时间'] = pd.to_datetime(df_date,format='%Y/%m/%d')
print(df['时间'])

#将日期格式化,并增加'格式化日期'字段
df['格式化日期1'] = df.时间.apply(lambda x: datetime.
                               strftime(x, format='%Y-%m-%d'))
df['格式化日期2'] = df.时间.dt.strftime('%Y-%m-%d')
print(df['格式化日期1'],'\n',df['格式化日期2'])

#抽取'时间'字段中的值
df['时间.年'] = df['时间'].dt.year

df['时间.月'] = df['时间'].dt.month
df['时间.周'] = df['时间'].dt.weekday
df['时间.日'] = df['时间'].dt.day
df['时间.时'] = df['时间'].dt.hour
df['时间.分'] = df['时间'].dt.minute
df['时间.秒'] = df['时间'].dt.second
print(df['时间.年'],df['时间.月'],df['时间.周'],df['时间.日'])
print(df['时间.时'],df['时间.分'],df['时间.秒'])