目录
2、将str类型/object类型转换为datetime类型,强制转换,跳过错误
3、将str类型/object类型转换为datetime类型,提取年月日时分秒
在做数据处理的过程,包括数据过滤、数据汇总计算等都会经常用到pandas从日期属性中提取年月日。pandas做数据处理分析也不例外。
1、pandas导入数据(以导入csv文件为例)
import numpy as np import pandas as pd import warnings warnings.filterwarnings("ignore") #查看某个函数、方法的详细使用。如输入pd.read_csv,然后按shift+tab(4次) df = pd.read_csv(r"spider.csv",header=None,names=['datetime','url','name','x','y'],encoding='utf-8') display(df.head(5)) display(df.info())
2、将str类型/object类型转换为datetime类型,强制转换,跳过错误
#pandas将str类型/object类型转换为datetime类型,强制转换,跳过错误 df["datetime"]= pd.to_datetime(df['datetime'],errors='coerce') display(df.head(5)) display(df.info())
3、将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 | 逻辑判断是不是日期所在年是不是闰年 |
#提取年月日时分秒:方法1 df = pd.read_csv(r"spider.csv",header=None,names=['datetime','url','name','x','y'],encoding='utf-8') df['datetime'] = pd.to_datetime(df['datetime'],errors='coerce') #先转化为datetime类型,默认format='%Y-%m-%d %H:%M:%S' 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())
4、利用字符串截取原理,提取年月日时分秒
#提取年月日时分秒:方法2 df = pd.read_csv(r"spider.csv",header=None,names=['datetime','url','name','x','y'],encoding='utf-8') #为了统一日期格式,先转化为datetime,并处理NaN元素 #先转化为datetime类型,默认format='%Y-%m-%d %H:%M:%S' df['datetime'] = pd.to_datetime(df['datetime'],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())