Pandas时间类型转换与处理的实现示例

目录
  • 案例1
  • 案例2
  • 案例3
  • 案例4
  • 补充知识
  • 案例5
  • 案例6
  • 案例7
  • 案例8
  • 案例9
  • 案例10

在平时的需求开发中,经常涉及到利用Pandas处理日期相关类型字段的转换和操作,为此特地记录以下练习案例,帮助大家的同时,也便于日后的学习和复盘

案例1

问题: 提取'W1|2022/7/28'字段中的年月日信息,取名为week_start,即一周开始的日期,并根据week_start计算出该周结束的具体日期week_end

import pandas as pd
import datetime
df1 = pd.DataFrame([[6,3],[6,3]], columns = ['Working day','W1|2022/7/28'])
# 一周开始的日期
# '2022/7/28'——>str类型
week_start = df1.columns[1].split('|')[1]
# 将start_day类型转换成date类型(2022-07-28)
week_start = datetime.datetime.strptime(week_start, '%Y/%m/%d').date()
# 一周结束的日期(2022-08-03)
week_end = week_start + datetime.timedelta(days=6)

df1

案例2

问题: 根据'Date'字段生成'Date - 2'字段

import pandas as pd
from datetime import timedelta
from datetime import datetime

df2 = pd.DataFrame([[1,'20191031'],
                   [2,'20191106'],
                   [3,'20191106']],columns=['Id','Date'])
# 'Date'字段中的值减去2天,生成'Date - 2'字段
df2['Date - 2'] = df2['Date'].apply(lambda x:(datetime.strptime(x,'%Y%m%d') - timedelta(days=datetime.strptime(x,'%Y%m%d').weekday())).strftime("%Y%m%d"))

df2

案例3

问题:从字符串表示的日期时间中仅获取“年/月/日”

import pandas as pd
from datetime import datetime

df3 = pd.DataFrame([[1,'2017-01-02 00:00:00'],
                   [2,'2017-01-09 00:00:00']
                   ],columns = ['Id','Wk'])

df3

错误写法

# 运行以下代码会报错'str' object has no attribute 'strftime'
df3['new_wk'] = df3['Wk'].apply(lambda x:x.strftime("%Y%m%d"))

正确写法

# 先利用.strptime()将str格式的变量转化成datetime下的时间格式
# 然后再利用.strftime()获取“年/月/日”
df3['Wk'] = df3['Wk'].apply(lambda x:datetime.strptime(x,"%Y-%m-%d %H:%M:%S"))
df3['new_Wk'] = df3['Wk'].apply(lambda x:x.strftime("%Y/%m/%d"))

处理过后的df3

案例4

问题:将'月/日/年 时间'格式的值转换为'年月日'(10/11/19 05:28:27 => 20191011)

import pandas as pd

df4 = pd.DataFrame([['A','10/11/19 05:28:27','08/04/20 08:38:59'],
                   ['B','10/11/19 05:28:27',None],
                   ['C','10/11/19 05:28:27',None]
                  ],columns = ['site','creation_date','closure_date'])

df4

# 将'creation_date'栏位的值变形
# 10/11/19 05:28:27 => 20191011
df4['creation_date'] = df4['creation_date'].apply(lambda x:pd.to_datetime(x).strftime("%Y%m%d"))

# 将'closure_date'字段中nan值填充为0
df4['closure_date'] = df4['closure_date'].fillna(0)
# 筛选closure_date'字段中值为0的数据记录,取名为df4_na
df4_na = df4[df4['closure_date'].isin([0])]
# 筛选closure_date'字段中值不为0的数据记录,取名为df4
df4 = df4[~df4['closure_date'].isin([0])]

# 将'closure_date'栏位的值变形
# 08/04/20 08:38:59 => 20200804
df4['closure_date'] = df4['closure_date'].apply(lambda x:pd.to_datetime(x).strftime("%Y%m%d"))

df4 = pd.concat([df4, df4_na], ignore_index = True)

处理过后的df4

补充知识

我们通常使用pd.to_datetime()和s.astype('datetime64[ns]')来做时间类型转换

import pandas as pd

t = pd.Series(['20220720','20220724'])
# dtype: datetime64[ns]
new_t1 = pd.to_datetime(t)
new_t2 = t.astype('datetime64[ns]')

t

new_t1

new_t2 

案例5

问题: 添加字段'Week',逐行递增

import pandas as pd

df5 = pd.DataFrame(columns=['Week','Materials'])
all_material = ['A32456','B78495']

for row in range(0,3):
    week = row + 1
    datas = [week, all_material]
    df5.loc[row] = datas
'''
df5:

  Week         Materials
0    1  [A32456, B78495]
1    2  [A32456, B78495]
2    3  [A32456, B78495]
'''
print(df5)

案例6

问题:日期型转换为字符型

import datetime
today = datetime.date.today() # date类型 2022-07-28
today.strftime('%Y-%m-%d') # '2022-07-28'
import datetime
dt = datetime.datetime.now() # datetime类型 2022-07-28 22:46:20.528813
dt.strftime('%Y-%m-%d') # '2022-07-28'
import datetime
today = str(datetime.date.today()) # str类型 2022-07-28
today.replace("-","") # '20220728'

案例7

问题:文本型转日期型

#文本型日期转为日期型日期
import pandas as pd
from datetime import datetime
df7=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
                '城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})

df7

文本型转为日期型可用datetime.strptime函数

# "%Y-%m-%d"表示将文本日期解析为年月日的日期格式
df7['日期'] = df7['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))

文本型转为日期型也可用pd.to_datetime函数

# "%Y-%m-%d"表示将文本日期解析为年月日的日期格式
df7['日期'] = pd.to_datetime(df7['销售日期'],format='%Y-%m-%d')

处理过后的df7

案例8

问题:提取日期字段的年份、月份、日份和周数

import pandas as pd
from datetime import datetime
df8=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
                '城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})

df8['日期'] = df8['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))

df8 

#由日期数据提取年
df8['年份'] = df8['日期'].apply(lambda x: x.year)
df8['年份'] =df8['年份'].astype(str)+'年'

#由日期数据提取月
df8['月份'] = df8['日期'].apply(lambda x: x.month)
df8['月份'] =df8['月份'].astype(str)+'月'

#由日期数据提取日
df8['日份'] = df8['日期'].apply(lambda x: x.day)
df8['日份'] =df8['日份'].astype(str)+'日'

# 日期中的周使用date.isocalendar()[1]提取
#根据日期返回周数,以周一为第一天开始
df8['周数'] = [date.isocalendar()[1] for date in df8['日期'].tolist()]
df8['周数'] = df8['周数'].astype(str)+'周'

处理后的df8

案例9

问题:借助offset时间偏移函数将日期加3天

import pandas as pd
from datetime import datetime
df9=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
                '城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})

df9['日期'] = df9['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))

df9

#借助offset时间偏移函数将日期加3天
from pandas.tseries.offsets import Day
df9['日期_3']=df9['日期']+Day(3)

处理后的df9

案例10

问题:将文本型日期转换为日期型日期

#文本型日期转为日期型日期
import pandas as pd
import datetime as dt
from datetime import datetime
df1=pd.DataFrame({'销售时间':['2022-05-01 00:00:00','2022-05-02 00:00:00','2022-05-03 00:00:00','2022-05-04 00:00:00','2022-05-05 00:00:00',
                         '2022-05-06 00:00:00','2022-05-07 00:00:00','2022-05-08 00:00:00','2022-05-09 00:00:00','2022-05-10 00:00:00',]})
#df['日期']=df['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))
df1['日期_x']=df1['销售时间'].str.split(' ',expand=True)[0]
df1['日期_y']=pd.to_datetime(df1['销售时间'],format='%Y-%m-%d')
df1

df10

日期中带有时分秒'00:00:00',有如下方法将其处理为'%Y-%m-%d'形式

df10['日期']=df10['销售时间'].str.split(' ',expand=True)[0]

处理后的df10

到此这篇关于Pandas时间类型转换与处理的实现示例的文章就介绍到这了,更多相关Pandas时间类型转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas进行时间数据的转换和计算时间差并提取年月日

    #pd.to_datetime函数 #读取数据 import pandas as pd data = pd.read_csv('police.csv') #将stop_date转化为datetime的格式的dataframe,存到stop_datetime data['stop_datetime'] = pd.to_datetime(data.stop_date') #自定义一个时间,计算时间差 data_new = pd.to_datetime('2006-01-01') data['time

  • pandas 时间格式转换的实现

    OUTLINE  常见的时间字符串与timestamp之间的转换 日期与timestamp之间的转换 常见的时间字符串与timestamp之间的转换 这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢? ① 时间字符串转化成时间戳将时间字符串转化成时间戳分为两步: 第一步:将时间字符串转换成时间元组 第二步:将时间元组转换成时间戳类型 import time data['timestamp'

  • Python Pandas 转换unix时间戳方式

    使用pandas自带的pd.to_datetime把 unix 时间戳转为时间时默认是转换为 GMT标准时间 北京时间比这个时间还要加 8个小时, 使用python 自带的 time.localtime  转换时 默认是会处理好时区的问题,可以直接转换为 北京时间的: pandas需要自己处理时区问题 如果是pandas的字段(df.TIME为格式如上的时间戳)可以使用下面的方式转换: 以上这篇Python Pandas 转换unix时间戳方式就是小编分享给大家的全部内容了,希望能给大家一个参考

  • pandas的to_datetime时间转换使用及学习心得

    前言 昨天在网赛中做了一道题,虽然是外国人的Englis题目,但是内容很有学习的价值,值得仔细的学习,今天就把我所收获的一部分记录下来.其一:做个学习的资料记录.其二:分享出来,供大家参考. (收获了对处理大数据的又一次认识!!!) 这是一道将DataFrame的日期数据转换为python能认识的题目.这里重点讲一下to_datetime的部分使用. 首先说一下: 1/17/07 has the format "%m/%d/%y" 17-1-2007 has the format &q

  • pandas时间序列之如何将int转换成datetime格式

    目录 将int转换成datetime格式 原始时间格式 pandas 时间数据处理 转化时间类型 生成时间序列 提取时间属性 计算时间间隔 计算时间推移 获取当前机器的支持的最大时间和最小时间 将int转换成datetime格式 原始时间格式 users['timestamp_first_active'].head() 原始结果: 0 200903190432551 200905231748092 200906092312473 200910310601294 20091208061105Nam

  • Pandas时间类型转换与处理的实现示例

    目录 案例1 案例2 案例3 案例4 补充知识 案例5 案例6 案例7 案例8 案例9 案例10 在平时的需求开发中,经常涉及到利用Pandas处理日期相关类型字段的转换和操作,为此特地记录以下练习案例,帮助大家的同时,也便于日后的学习和复盘 案例1 问题: 提取'W1|2022/7/28'字段中的年月日信息,取名为week_start,即一周开始的日期,并根据week_start计算出该周结束的具体日期week_end import pandas as pd import datetime d

  • Pandas数据类型转换df.astype()及数据类型查看df.dtypes的使用

    目录 1.数据框字段类型查看:df.dtypes 2.维度查看df.shape: 3.数据框的策略基本信息df.info(): 4.某一列格式df['列名'].dtype: 5.数据类型转换.astype: Pandas所支持的数据类型: Python,numpy都有自己的一套数据格式,它们之间的对应关系可参考如下表格: pandas默认的数据类型是int64,float64. 1.数据框字段类型查看:df.dtypes 数据框td_link_data如下 print(td_link_data)

  • 对Pandas DataFrame缺失值的查找与填充示例讲解

    查看DataFrame中每一列是否存在空值: temp = data.isnull().any() #列中是否存在空值 print(type(temp)) print(temp) 结果如下,返回结果类型是Series,列中不存在空值则对应值为False: <class 'pandas.core.series.Series'> eventid False iyear False imonth False iday False approxdate True extended False reso

  • python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差. 给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象 from datetime import datetime from datetime import timedel

  • Java多线程执行处理业务时间太久解决方法代码示例

    背景:在政府开发了一个应用系统,主要功能是让企业填写企业资质信息,然后通过给定的公式,统计这一系列的信息,以得分的形式展示给政府领导查看.目前有1300家企业填报.由于得分是实时显示的,所以导致统计功能很慢. 代码运行流程: 1.查出1300企业信息 2.遍历1300企业信息,ji计算每家企业得分信息.每家预计时间为0.3秒.合计390秒.导致页面请求超时 3.导出(用jxl jar) 解决方案: 由于处理业务的,所以需要能有返回值的线程.用:Callable 直接上代码 1.调用线程的代码 L

  • pandas 空的dataframe 插入列名的示例

    如下所示: colum = ['性别','年龄','M','样本类型'] + muta_list + ['B'] data1 = pd.DataFrame(columns=colum) 以上这篇pandas 空的dataframe 插入列名的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • pandas 强制类型转换 df.astype实例

    废话不多说,大家还是直接看代码吧! import pandas as pd from matplotlib import pyplot as plt from datetime import datetime filename='sitka_weather_2014.csv' df=pd.read_csv(filename) print(df.dtypes) df[' Min Humidity']=df[' Min Humidity'].astype('float64') df=df.astyp

  • JS的时间格式化和时间戳转换函数示例详解

    JS的时间格式化和时间戳转换函数 //格式化时间 function dateFormat(fmt,date){ var o = { "M+" : date.getMonth()+1, //月份 "d+" : date.getDate(), //日 "h+" : date.getHours(), //小时 "m+" : date.getMinutes(), //分 "s+" : date.getSeconds

  • pandas 数据类型转换的实现

    数据处理过程的数据类型 当利用pandas进行数据处理的时候,经常会遇到数据类型的问题,当拿到数据的时候,首先需要确定拿到的是正确类型的数据,一般通过数据类型的转化,这篇文章就介绍pandas里面的数据类型(data types也就是常用的dtyps),以及pandas与numpy之间的数据对应关系. 主要介绍object,int64,float64,datetime64,bool等几种类型,category与timedelta两种类型会单独的在其他文章中进行介绍.当然本文中也会涉及简单的介绍.

  • 使用JavaScript 实现时间轴与动画效果的示例代码(前端组件化)

    目录 代码整理 JavaScript 中的 "帧" 实现"帧"的方法 1. setInterval 2. setTimeout 3. requestAnimationFrame 实现 Timeline 时间轴 实现 start 函数 实现 Animation 类 设计时间线的更新 添加 Delay 属性支持 实现暂停和重启功能 实现 Pause 实现 Resume 上一篇文章<用 JSX 实现 Carousel 轮播组件>中,我们实现了一个 "

随机推荐