专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python中的时间序列数据操作总结

  时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
  Pandas是Python中一个强大且流行的数据操作库,特别适合处理时间序列数据。它提供了一系列工具和函数可以轻松加载、操作和分析时间序列数据。
  在本文中,我们介绍时间序列数据的索引和切片、重新采样和滚动窗口计算以及其他有用的常见操作,这些都是使用Pandas操作时间序列数据的关键技术。数据类型
  Python
  在Python中,没有专门用于表示日期的内置数据类型。一般情况下都会使用datetime模块提供的datetime对象进行日期时间的操作。importdatetimetdatetime。datetime。now()print(ftype:{type(t)}andt:{t})type:classdatetime。datetimeandt:2022122614:20:51。278230
  一般情况下我们都会使用字符串的形式存储日期和时间。所以在使用时我们需要将这些字符串进行转换成datetime对象。
  一般情况下时间的字符串有以下格式:YYYYMMDD(e。g。20220101)YYYYMMDD(e。g。20220101)DDMMYYYY(e。g。01012022)DDMMYYYY(e。g。01012022)MMDDYYYY(e。g。01012022)MMDDYYYY(e。g。01012022)HH:MM:SS(e。g。11:30:00)HH:MM:SSAMPM(e。g。11:30:00AM)HH:MMAMPM(e。g。11:30AM)
  strptime函数以字符串和格式字符串作为参数,返回一个datetime对象。string2022010111:30:09tdatetime。datetime。strptime(string,YmdH:M:S)print(ftype:{type(t)}andt:{t})type:classdatetime。datetimeandt:2022010111:30:09
  格式字符串如下:
  还可以使用strftime函数将datetime对象转换回特定格式的字符串表示。tdatetime。datetime。now()tstringt。strftime(mdY,H:M:S)12262022,14:38:47tstringt。strftime(bdY,H:M:S)Dec262022,14:39:32
  Unix时间(POSIX时间或epoch时间)是一种将时间表示为单个数值的系统。它表示自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数。
  Unix时间和时间戳通常可以互换使用。Unix时间是创建时间戳的标准版本。一般情况下使用整数或浮点数据类型用于存储时间戳和Unix时间。
  我们可以使用time模块的mktime方法将datetime对象转换为Unix时间整数。也可以使用datetime模块的fromtimestamp方法。convertdatetimetounixtimeimporttimefromdatetimeimportdatetimetdatetime。now()unixtint(time。mktime(t。timetuple()))1672055277convertunixtimetodatetimeunixt1672055277tdatetime。fromtimestamp(unixt)2022122614:47:57
  使用dateutil模块来解析日期字符串获得datetime对象。fromdateutilimportparserdateparser。parse(29thofOctober,1923)datetime。datetime(1923,10,29,0,0)
  Pandas
  Pandas提供了三种日期数据类型:
  1、Timestamp或DatetimeIndex:它的功能类似于其他索引类型,但也具有用于时间序列操作的专门函数。tpd。todatetime(29101923,dayfirstTrue)Timestamp(1923102900:00:00)tpd。Timestamp(20190101,tzEuropeBerlin)Timestamp(2019010100:00:000100,tzEuropeBerlin)tpd。todatetime(〔04231920,10291923〕)DatetimeIndex(〔19200423,19231029〕,dtypedatetime64〔ns〕,freqNone)
  2、period或PeriodIndex:一个有开始和结束的时间间隔。它由固定的间隔组成。tpd。todatetime(〔04231920,10291923〕)periodt。toperiod(D)PeriodIndex(〔19200423,19231029〕,dtypeperiod〔D〕)
  3、Timedelta或TimedeltaIndex:两个日期之间的时间间隔。deltapd。TimedeltaIndex(data〔1days03:00:00,2days09:05:01。000030〕)TimedeltaIndex(〔1days02:00:00,1days06:05:01。000030〕,dtypetimedelta64〔ns〕,freqNone)
  在Pandas中,可以使用todatetime方法将对象转换为datetime数据类型或进行任何其他转换。importpandasaspddfpd。readcsv(dataset。txt)df。head()datevalue0199107013。5265911199108013。1808912199109013。2522213199110013。6110034199111013。565869df。info()classpandas。core。frame。DataFrameRangeIndex:204entries,0to203Datacolumns(total2columns):ColumnNonNullCountDtype0date204nonnullobject1value204nonnullfloat64dtypes:float64(1),object(1)memoryusage:3。3KBConverttodatetimedf〔date〕pd。todatetime(df〔date〕,formatYmd)df。info()classpandas。core。frame。DataFrameRangeIndex:204entries,0to203Datacolumns(total2columns):ColumnNonNullCountDtype0date204nonnulldatetime64〔ns〕1value204nonnullfloat64dtypes:datetime64〔ns〕(1),float64(1)memoryusage:3。3KBConverttoUnixdf〔unixtime〕df〔date〕。apply(lambdax:x。timestamp())df。head()datevalueunixtime0199107013。526591678326400。01199108013。180891681004800。02199109013。252221683683200。03199110013。611003686275200。04199111013。565869688953600。0df〔dateconvertedfromunix〕pd。todatetime(df〔unixtime〕,units)df。head()datevalueunixtimedateconvertedfromunix0199107013。526591678326400。0199107011199108013。180891681004800。0199108012199109013。252221683683200。0199109013199110013。611003686275200。0199110014199111013。565869688953600。019911101
  我们还可以使用parsedates参数在任何文件加载时直接声明日期列。dfpd。readcsv(dataset。txt,parsedates〔date〕)df。info()classpandas。core。frame。DataFrameRangeIndex:204entries,0to203Datacolumns(total2columns):ColumnNonNullCountDtype0date204nonnulldatetime64〔ns〕1value204nonnullfloat64dtypes:datetime64〔ns〕(1),float64(1)memoryusage:3。3KB
  如果是单个时间序列的数据,最好将日期列作为数据集的索引。df。setindex(date,inplaceTrue)Valuedate199107013。526591199108013。180891199109013。252221199110013。611003199111013。565869。。。。。。2008020121。6542852008030118。2649452008040123。1076772008050122。9125102008060119。431740
  Numpy也有自己的datetime类型np。Datetime64。特别是在大型数据集时,向量化是非常有用的,应该优先使用。importnumpyasnparrdatenp。array(20000101,dtypenp。datetime64)arrdatearray(20000101,dtypedatetime64〔D〕)broadcastingarrdatearrdatenp。arange(30)array(〔20000101,20000102,20000103,20000104,20000105,20000106,20000107,20000108,20000109,20000110,20000111,20000112,20000113,20000114,20000115,20000116,20000117,20000118,20000119,20000120,20000121,20000122,20000123,20000124,20000125,20000126,20000127,20000128,20000129,20000130〕,dtypedatetime64〔D〕)有用的函数
  下面列出的是一些可能对时间序列有用的函数。dfpd。readcsv(dataset。txt,parsedates〔date〕)df〔date〕。dt。dayname()0Monday1Thursday2Sunday3Tuesday4Friday。。。199Friday200Saturday201Tuesday202Thursday203SundayName:date,Length:204,dtype:object
  DataReader
  Pandasdatareader是pandas库的一个辅助库。它提供了许多常见的金融时间序列数据pipinstallpandasdatareaderfrompandasdatareaderimportwbGDPperCapitaFromWorldBankdfwb。download(indicatorNY。GDP。PCAP。KD,country〔US,FR,GB,DK,NO〕,start1960,end2019)NY。GDP。PCAP。KDcountryyearDenmark201957203。027794201856563。488473201755735。764901201654556。068955201553254。856370。。。。。。UnitedStates196421599。818705196320701。269947196220116。235124196119253。547329196019135。268182〔300rowsx1columns〕
  日期范围
  我们可以使用pandas的daterange方法定义一个日期范围。pd。daterange(start20210101,end20220101,freqD)DatetimeIndex(〔20210101,20210102,20210103,20210104,20210105,20210106,20210107,20210108,20210109,20210110,。。。20211223,20211224,20211225,20211226,20211227,20211228,20211229,20211230,20211231,20220101〕,dtypedatetime64〔ns〕,length366,freqD)pd。daterange(start20210101,end20220101,freqBM)DatetimeIndex(〔20210129,20210226,20210331,20210430,20210531,20210630,20210730,20210831,20210930,20211029,20211130,20211231〕,dtypedatetime64〔ns〕,freqBM)fridayspd。daterange(20221101,20221231,freqWFRI)DatetimeIndex(〔20221104,20221111,20221118,20221125,20221202,20221209,20221216,20221223,20221230〕,dtypedatetime64〔ns〕,freqWFRI)
  我们可以使用timedeltarange方法创建一个时间序列。tpd。timedeltarange(0,periods10,freqH)TimedeltaIndex(〔0days00:00:00,0days01:00:00,0days02:00:00,0days03:00:00,0days04:00:00,0days05:00:00,0days06:00:00,0days07:00:00,0days08:00:00,0days09:00:00〕,dtypetimedelta64〔ns〕,freqH)
  格式化
  我们dt。strftime方法改变日期列的格式。df〔newdate〕df〔date〕。dt。strftime(bd,Y)df。head()datevaluenewdate0199107013。526591Jul01,19911199108013。180891Aug01,19912199109013。252221Sep01,19913199110013。611003Oct01,19914199111013。565869Nov01,1991
  解析
  解析datetime对象并获得日期的子对象。df〔year〕df〔date〕。dt。yeardf〔month〕df〔date〕。dt。monthdf〔day〕df〔date〕。dt。daydf〔calendar〕df〔date〕。dt。datedf〔hour〕df〔date〕。dt。timedf。head()datevalueyearmonthdaycalendarhour0199107013。5265911991711991070100:00:001199108013。1808911991811991080100:00:002199109013。2522211991911991090100:00:003199110013。61100319911011991100100:00:004199111013。56586919911111991110100:00:00
  还可以重新组合它们。df〔datejoined〕pd。todatetime(df〔〔year,month,day〕〕)print(df〔datejoined〕)019910701119910801219910901319911001419911101。。。1992008020120020080301201200804012022008050120320080601Name:datejoined,Length:204,dtype:datetime64〔ns〕
  过滤查询
  使用loc方法来过滤DataFrame。dfdf。loc〔20210101:20210110〕
  truncate可以查询两个时间间隔中的数据dftruncateddf。truncate(20210105,20220110)
  常见数据操作
  下面就是对时间序列数据集中的值执行操作。我们使用yfinance库创建一个用于示例的股票数据集。getgooglestockpricedataimportyfinanceasyfstartdate20200101enddate20230101tickerGOOGLdfyf。download(ticker,startdate,enddate)df。head()DateOpenHighLowCloseAdjCloseVolume2020010267。42050268。43399867。32450168。43399868。433998272780002020010367。40000268。68750067。36599768。07599668。075996234080002020010667。58149769。91600067。55000369。89050369。890503467680002020010770。02300370。17500369。57800369。75550169。755501343300002020010869。74099770。59249969。63150070。25199970。25199935314000
  计算差值
  diff函数可以计算一个元素与另一个元素之间的插值。subtractthatdaysvaluefromthepreviousdaydf〔DiffClose〕df〔Close〕。diff()Subtractthatdaysvaluefromthedaysvalue2daysagodf〔DiffClose2Days〕df〔Close〕。diff(periods2)
  累计总数df〔VolumeCumulative〕df〔Volume〕。cumsum()
  滚动窗口计算
  滚动窗口计算(移动平均线)。df〔CloseRolling14〕df〔Close〕。rolling(14)。mean()df。tail()
  可以对我们计算的移动平均线进行可视化
  常用的参数:center:决定滚动窗口是否应以当前观测值为中心。minperiods:窗口中产生结果所需的最小观测次数。spd。Series(〔1,2,3,4,5〕)therollingwindowwillbecenteredoneachobservationrollingmeans。rolling(window3,centerTrue)。mean()0NaN12。023。034。04NaNdtype:float64Explanation:firstwindow:〔na12〕nasecondwindow:〔123〕2therollingwindowwillnotbecentered,andwillinsteadbeanchoredtotheleftsideofthewindowrollingmeans。rolling(window3,centerFalse)。mean()0NaN1NaN22。033。044。0dtype:float64Explanation:firstwindow:〔nana1〕nasecondwindow:〔na12〕nathirdwindow:〔123〕2
  平移
  Pandas有两个方法,shift()和tshift(),它们可以指定倍数移动数据或时间序列的索引。Shift()移位数据,而tshift()移位索引。shiftthedatadfshifteddf。shift(5,axis0)dfshifted。head(10)shifttheindexesdftshifteddf。tshift(periods4,freqD)dftshifted。head(10)
  dfshifted
  dftshifted
  时间间隔转换
  在Pandas中,操toperiod函数允许将日期转换为特定的时间间隔。可以获取具有许多不同间隔或周期的日期df〔Period〕df〔Date〕。dt。toperiod(W)
  频率
  Asfreq方法用于将时间序列转换为指定的频率。monthlydatadf。asfreq(M,methodffill)
  常用参数:
  freq:数据应该转换到的频率。这可以使用字符串别名(例如,M表示月,H表示小时)或pandas偏移量对象来指定。
  method:如何在转换频率时填充缺失值。这可以是ffill(向前填充)或bfill(向后填充)之类的字符串。
  采样
  resample可以改变时间序列频率并重新采样。我们可以进行上采样(到更高的频率)或下采样(到更低的频率)。因为我们正在改变频率,所以我们需要使用一个聚合函数(比如均值、最大值等)。
  resample方法的参数:
  rule:数据重新采样的频率。这可以使用字符串别名(例如,M表示月,H表示小时)或pandas偏移量对象来指定。downsamplemonthlydatadf。resample(M)。mean()
  upsampleminutedatadata。resample(T)。ffill()
  百分比变化
  使用pctchange方法来计算日期之间的变化百分比。df〔PCT〕df〔Close〕。pctchange(periods2)print(df〔PCT〕)Date20200102NaN20200103NaN202001060。021283202001070。024671202001080。005172。。。202212190。026634202212200。013738202212210。012890202212220。014154202212230。003907Name:PCT,Length:752,dtype:float64总结
  在Pandas和NumPy等库的帮助下,可以对时间序列数据执行广泛的操作,包括过滤、聚合和转换。本文介绍的是一些在工作中经常遇到的常见操作,希望对你有所帮助。
  作者:OkanYenign

拜登的声东击西美国总统拜登如果说美国前总统特朗普适时调整了美国国家安全战略,确定了美国面临的战略对手,推动外交战略的重心从反恐向大国竞争转型的话,那么拜登是首位将大国竞争战略全面付诸实施,积极重当观众瞎?来,让10位女星告诉你,啥叫能把人掰弯的女扮男装自古以来,影视剧里女扮男装的桥段屡见不鲜,通常是女主外出行走江湖时,为了隐藏女儿家身份才故意打扮成男儿身。以往的影视剧女扮男装的造型都是统一扎马尾丸子头,或是贴个假胡子来糊弄观众。神段子合格副驾驶,上车就吃,吃饱就睡,下车尿尿,问哪不知道有没有文化人出来解释下这究竟是什么原理呢有没有试过的这个真的有效果吗第一次坐高铁大家看这个速度正常吗你的酒量是真的不行啊假如在古代给皇帝做一碗泡面会怎么样大街上看得到这究竟是酸奶还神回复有没有人能解释一下这个三围,是什么水平?科学证明物质不会消失,那么这些物质去哪里了?最近都不要在我面前提盖浇饭有没有人能解释一下这个三围,是什么水平?这我也不知道对不对。有谁知道是哪首歌吗?朋友们,今日益智问题已送达。这王者官宣天游接入,S28赛季将有三大问题劝退,手机内存影响最小王者荣耀游戏内正式发布公告,6月23日腾讯天游公司正式接入,后续游戏服务将由腾讯计算机公司和腾讯天游公司共同提供。S28新赛季也可能在23日同步开启,这将是腾讯天游接手王者以来的第数字人民币应用提速不断,核心受益龙头企业一览(名单)前言今年以来,数字人民币在金融应用场景实现多领域破冰。近日,全国首张数字人民币车险保单正式诞生,这标志着数字人民币在保险应用场景成功落地。对此,有业内人士预计,未来数字人民币在贷款国务院关于同意滁州高新技术产业开发区升级为国家高新技术产业开发区的批复国务院关于同意滁州高新技术产业开发区升级为国家高新技术产业开发区的批复国函202253号安徽省人民政府你省关于将滁州高新技术产业开发区升级为国家高新技术产业开发区的请示收悉。现批复刘诗诗进组?窦骁女友不满分配?邓家佳新剧扑街?黄景瑜再被爆?邓家佳新剧扑街?回廊亭刚上线一天,就遭到各式各样的吐槽,完全没有达到最开始期待的效果。就很像草台班子制作出来的剧,因为不管是剧情还是台词剪辑,几乎都没有让人满意的地方。也许是太欺负37岁朱珠大方分享内衣!穿灰色紧身衣秀事业线,皮肤白嫩酒窝抢镜近日,朱珠在社交平台上分享了一段内衣推荐视频。视频中的朱珠化着淡妆,粉粉的嘴唇搭上酒窝,看起来十分性感甜美,一头长直发散在肩膀两侧,清纯又不失端庄。她专注地盯着镜头,向粉丝朋友们介6月17日一大老虎和多名厅官被通报,有人受贿4亿多6月17日,江苏省政法委原书记王立科受贿案开庭审理还有多名厅级(副厅)干部被查,如广东省潮州市政府原副市长市公安局原局长陈声亮黑龙江省民政厅副厅长周宏等等。有多名公安系统干部被查,弹射航母有多难造?天时地利人和缺一不可,英法俄只能羡慕嫉妒恨6月17日,003型航母福建舰在江南造船厂下水,引发了国内外军迷高度的关注,因为福建舰可是,世界范围内第一艘装备电磁弹射器的常规动力航母世界第二款装备电磁弹射器的航母,世界第三艘下
三十岁买个几万块的国产车丢人吗?不丢人,自己不偷不抢挣来的钱买车有什么的?除非你买个二手众泰,那倒是很容易被四邻八舍嘲笑。说句不客气的话,你有一辆自己的汽车就比一半的同龄人更强了。根据第七次人口普查结果,内地人均去湘潭旅游的旅游攻略有哪些?湘潭被很多人熟知就是因为伟人故里韶山。其实,除了人文景观,韶山的自然风光也非常优美。我们的湘潭之行,就从韶山开始韶山是一代伟人毛泽东的故乡,也是他青少年时期曾生活学习劳动和从事革命你认为普通话讲得最好的是哪个省的人?我认为普通话讲的最好的是河南人,有好多河南地方话,在别的省大家都听的懂,因为河南地方话接近普通话,还有一种很重要的解释,就是河南地处中原,洛阳,开封都是中国过去的古都,如唐宋等等都如果一个工厂的厂长车间主任班长拿的工资和厂里最低工资的员工一样,这个厂的发展会好吗?首先,得肯定的是拿最低工资的员工心里必定很平衡,但是,有利必有弊,一个领导拿着和员工一样的工资,员工心里必定会想着其实你也跟我差不多,而我也没必要听你的,这让对于一个车间主任,班长你的工资能买什么车?我的工资大部分的车都可以买。每个月入账8000块,那么一年就是十万。十年就是100万,50年就是500万。这么算下来的话,基本上500万以内的车都可以买得起。工资一个月8000不到工龄工资占比过高合理吗?城镇职工养老保险的原则是缴费年限和缴费数额与养老金领取数额成正比,缴多得多,缴费年限长多领。企业退休没有身份职务职称的待遇,更没有用学历确定养老金之说。工龄工资在退休工资中占比过高有胎心胎芽后胎停的几率是不是很小?即使有胎心胎芽了也会发生胎停的,我刚做过流产手术一个月,意外怀孕了,8周的时候去查了B超和血HCG,结果都很好,本来是意外没有想要的,检查后发现长得很好的时候,就慢慢接受了这个孩子在合肥干什么工作可以把月收入稳定在一万以上?我是合肥本地人,在这片土地上生活了30年了,我最有资格回答。合肥作为安徽省会,四大科教之城,重点大学有科大,工大,安大,重点企业有讯飞,江淮,格力,美的,美菱等等,当然还有很多别的手上有个2万块钱,在农村做点什么生意好?您好,科学兴农为您解答。手上有两万块钱,在农村做什么生意比较好?现在不少农民朋友都想在家乡做点小生意,不想到外面打工,毕竟到外地打工不仅要和家人两地分居,而且上班还要受人管制,所以对于懦弱容易被校园暴力的学生,学什么武术能防止被霸凌,巴西柔术,泰拳,跆拳道,散打?学什么武术,只要坚持年以上,有高频率的实战都可以有效防身。对于懦弱的性格被欺负,首先最重要是情商的培养,人最终还是要在社会生活,而校园浓缩版的社会,只不过它更加简单和安全,既然事情初中毕业后考小学教师资格证,能教好学生吗?不请自来。看到这样一个问题,深觉教育正本清源依旧任重而道远。初中毕业后考小学教师资格证,能教好学生吗?在今天还问出这样的问题,只能用荒唐之极来形容,如果一定要一个答案的话,那就是初
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网