在做数据处理的过程,包括数据过滤、数据汇总计算等都会经常用到pandas从日期属性中提取年月日。pandas做数据处理分析也不例外。

pandas日期字段处理--日期和字符串之间转化,日期提取与计算_数据处理

一、获取数据

import numpy as np
import pandas as pd
import pymysql
import warnings
warnings.filterwarnings("ignore")
#查看某个函数、方法的详细使用。如输入pd.read_csv,然后按shift+tab(4次)


#连接数据库(mysql)
con = pymysql.connect(host = '127.0.0.1',port=3306,
                     user='root',passwd='131129',db='znf',
                      use_unicode=True,charset='utf8')
# 查询数据
sql = '''SELECT  
            产品编号,
            单位,
            规格,
            售价,
            是否赠品,
            创建时间
        FROM 
            在售产品; '''
# 执行查询
df = pd.read_sql_query(sql,con = con)
#随机抽取5行
display(df.sample(5))
#查询每一列的数据类型
print(df.dtypes,"\n------------")
print(df["创建时间"].dtypes,"\n------------")
#查询表格大小
print(df.shape,"\n------------")
#查询是否有空值
print(df.info(),"\n------------")
#获取基本统计信息
display(df.describe())

pandas日期字段处理--日期和字符串之间转化,日期提取与计算_逻辑判断_02

pandas日期字段处理--日期和字符串之间转化,日期提取与计算_mysql_03

二、日期函数表

将str类型/object类型转换为datetime类型,提取年月日时分秒

属性

说明

year

datetime 的年

month

datetime 的月

day

datetime 的日

hour

datetime 的小时

minute

datetime 的分钟

second

datetime 的秒

microsecond

datetime 的微秒

nanosecond

datetime 的纳秒

date

返回 datetime.date(不包含时区信息)

time

返回 datetime.time(不包含时区信息)

timetz

返回带本地时区信息的 datetime.time

dayofyear

一年里的第几天

weekofyear

一年里的第几周

week

一年里的第几周

dayofweek

一周里的第几天,Monday=0, Sunday=6

weekday

一周里的第几天,Monday=0, Sunday=6

weekday_name

这一天是星期几 (如,Friday)

quarter

日期所处的季节:Jan-Mar = 1,Apr-Jun = 2 等

days_in_month

日期所在的月有多少天

is_month_start

逻辑判断是不是月初(由频率定义)

is_month_end

逻辑判断是不是月末(由频率定义)

is_quarter_start

逻辑判断是不是季初(由频率定义)

is_quarter_end

逻辑判断是不是季末(由频率定义)

is_year_start

逻辑判断是不是年初(由频率定义)

is_year_end

逻辑判断是不是年末(由频率定义)

is_leap_year

逻辑判断是不是日期所在年是不是闰年

# 将str类型/object类型转换为datetime类型,提取年月日时分秒
#先转化为datetime类型,默认format='%Y-%m-%d %H:%M:%S'
df["datetime"]=pd.to_datetime(df["创建时间"],errors="coerce")
print(df["创建时间"].dtypes,"\n------------")


df['date'] = df['datetime'].dt.date   #转化提取年-月-日
df['year'] =df['datetime'].dt.year.fillna(0).astype("int")   #转化提取年 ,
#如果有NaN元素则默认转化float64型,要转换数据类型则需要先填充空值,在做数据类型转换
df['month'] = df['datetime'].dt.month.fillna(0).astype("int")  #转化提取月
df['%Y_%m'] = df['year'].map(str) + '-' + df['month'].map(str) #转化获取年-月
df['day'] = df['datetime'].dt.day.fillna(0).astype("int")      #转化提取天
df['hour'] = df['datetime'].dt.hour.fillna(0).astype("int")    #转化提取小时
df['minute'] = df['datetime'].dt.minute.fillna(0).astype("int") #转化提取分钟
df['second'] = df['datetime'].dt.second.fillna(0).astype("int") #转化提取秒
df['dayofyear'] = df['datetime'].dt.dayofyear.fillna(0).astype("int") #一年中的第n天
df['weekofyear'] = df['datetime'].dt.weekofyear.fillna(0).astype("int") #一年中的第n周
df['weekday'] = df['datetime'].dt.weekday.fillna(0).astype("int") #周几,一周里的第几天,Monday=0, Sunday=6
df['quarter'] = df['datetime'].dt.quarter.fillna(0).astype("int")  #季度
display(df.head())

pandas日期字段处理--日期和字符串之间转化,日期提取与计算_数据处理_04

三、统一格式按照长度截取

# 利用字符串截取原理,提取年月日时分秒


#为了统一日期格式,先转化为datetime,并处理NaN元素
#先转化为datetime类型,默认format='%Y-%m-%d %H:%M:%S'
df['datetime'] = pd.to_datetime(df['创建时间'],errors='coerce').fillna("0000-00-00 00:00:00")
#转化为字符串类型,利用截取字符串获取年月日时分秒
df['date'] = df['datetime'].astype("str").str[0:10] #截取年-月-日
df['%Y-%m'] = df['datetime'].astype("str").str[0:7] #截取年-月
df['day'] = df['datetime'].astype("str").str[8:10] #截取日
df['hour'] = df['datetime'].astype("str").str[11:13] #截取日
display(df.head()) # 也是同样的结果

在做数据处理的过程,包括数据过滤、数据汇总计算等都会经常用到pandas从日期属性中提取年月日。建议刚入门的伙伴收藏练习。