独家分享!5个鲜为人知的Pandas技巧

Pandas为Python营造了一个高水平的操作环境,还提供了便于操作的数据结构和分析工具 2019-11-20 10:54:32 Python数据结构数据库 一张思维导图,包罗全面监控体系建设要点 近年来,随着计算机技术的飞速发展,以及行业信息的共享,传统企业的运维己不再固步自封。本文将把笔者在工作过程中积累的监控体系建设知识进行总结,梳理成体系。 2019-11-20 10:43:32 监控系统技术工具 说说开源那些事儿 前段时间我们遇到了一个情况,课程推送发出来之后有位同学在群里提到,机构提供的项目就是他同学导师的开源项目。 2019-11-20 10:00:56 开源侵权版权 Visual Studio 2019之让我们统一代码风格吧 进行团队开发的小伙伴可能已经想到,如果我们能够把这些UI设置保存在文件当中,那么就有可能在团队当中通过共享这个文件来统一代码风格。VS2019为我们提供了这个功能。

Pandas为Python营造了一个高水平的操作环境,还提供了便于操作的数据结构和分析工具

Pandas为Python营造了一个高水平的操作环境,还提供了便于操作的数据结构和分析工具

[[282978]]

无需更多介绍,Pandas已经是Python中数据分析的常用工具了。作为一个数据科学家,Pandas是我日常使用的工具,我总会惊叹于它强大的功能。本篇文章将会讲解5个我最近学到的,并且极大提升了工作效率的Pandas技巧。

对于pandas新手而言,Pandas为Python编程语言营造了一个高水平的操作环境,还提供了便于操作的数据结构和分析工具。Pandas这个名字是由“面板数据”(panel data)衍生而来,这是一个计量经济学中的术语,它是一个数据集,由同一个个体在多个时间段内所观察的结果组成。

1. 数据范围

从外部应用程序接口(API)或者数据库中抓取数据的时候,通常需要确定一个数据范围。Pandas可以很好地解决这一问题,它的data_range函数能够产出按日、月、年等方式递增的日期。

假设现在需要一组按天数递增的数据范围。

  1. date_from="2019-01-01"
  2. date_to="2019-01-12"
  3. date_range=pd.date_range(date_from,date_to,freq="D")
  4. date_range

独家分享!5个鲜为人知的Pandas技巧

把产出的date_range转化为开始和结束日期,这一步可以用后续函数(subsequentfunction)完成。

  1. fori,(date_from,date_to)inenumerate(zip(date_range[:-1],date_range[1:]),1):
  2. date_from=date_from.date().isoformat()
  3. date_to=date_to.date().isoformat()
  4. print("%d.date_from:%s,date_to:%s"%(i,date_from,date_to))1.date_from:2019-01-01,date_to:2019-01-02

2. date_from: 2019-01-02, date_to: 2019-01-03

3. date_from: 2019-01-03, date_to: 2019-01-04

4. date_from: 2019-01-04, date_to: 2019-01-05

5. date_from: 2019-01-05, date_to: 2019-01-06

6. date_from: 2019-01-06, date_to: 2019-01-07

7. date_from: 2019-01-07, date_to: 2019-01-08

8. date_from: 2019-01-08, date_to: 2019-01-09

9. date_from: 2019-01-09, date_to: 2019-01-10

10. date_from: 2019-01-10, date_to: 2019-01-11

11. date_from: 2019-01-11, date_to: 2019-01-12

2. 使用指示符合并

合并两个数据集就是将它们变成一个数据集的过程,这需要根据它们的公共属性或栏来对齐其中的每一行。

合并函数中有许多arguments(对应于传递给函数的参数的类数组对象),其中指示符(indicator)argument可主要应用到合并过程中,它在左、右或者两边的数据帧(DataFrame)函数添加_merge栏,这一栏就显示了“数据行是哪里来的”。用_merge栏来处理更大的数据集会非常有用,尤其是需要检查合并操作的正确率时。

  1. left=pd.DataFrame({"key":["key1","key2","key3","key4"],"value_l":[1,2,3,4]})

独家分享!5个鲜为人知的Pandas技巧

  1. right=pd.DataFrame({"key":["key3","key2","key1","key6"],"value_r":[3,2,1,6]})

独家分享!5个鲜为人知的Pandas技巧

  1. df_merge=left.merge(right,on='key',how='left',indicator=True)

独家分享!5个鲜为人知的Pandas技巧

_merge栏可以用来检查是否得到了我们预期的行数,而且它反映的是来自两个数据框架的预期值。

  1. df_merge._merge.value_counts()both3
  2. left_only1
  3. right_only0
  4. Name:_merge,dtype:int64

3. 最近合并(Nearest merge)

在处理像股票或者加密货币一类的金融数据时,还需要把报价(价格变化)与实际交易结合。现在,假设目的是希望将每笔交易与之前几毫秒产生的报价合并起来。Pandas有一个merge_asof函数,它能够通过最近的key(本文中指时间戳)来合并数据框架。有关报价和交易的数据集可以从pandas实例中获得。

报价数据框架包含了不同股票的价格变化。通常情况下,报价要比交易多得多。

  1. quotes=pd.DataFrame(
  2. [
  3. ["2016-05-2513:30:00.023","GOOG",720.50,720.93],
  4. ["2016-05-2513:30:00.023","MSFT",51.95,51.96],
  5. ["2016-05-2513:30:00.030","MSFT",51.97,51.98],
  6. ["2016-05-2513:30:00.041","MSFT",51.99,52.00],
  7. ["2016-05-2513:30:00.048","GOOG",720.50,720.93],
  8. ["2016-05-2513:30:00.049","AAPL",97.99,98.01],
  9. ["2016-05-2513:30:00.072","GOOG",720.50,720.88],
  10. ["2016-05-2513:30:00.075","MSFT",52.01,52.03],
  11. ],
  12. columns=["timestamp","ticker","bid","ask"],
  13. )
  14. quotes['timestamp']=pd.to_datetime(quotes['timestamp'])

独家分享!5个鲜为人知的Pandas技巧

交易数据框架包含了不同股票的交易信息。

  1. trades=pd.DataFrame(
  2. [
  3. ["2016-05-2513:30:00.023","MSFT",51.95,75],
  4. ["2016-05-2513:30:00.038","MSFT",51.95,155],
  5. ["2016-05-2513:30:00.048","GOOG",720.77,100],
  6. ["2016-05-2513:30:00.048","GOOG",720.92,100],
  7. ["2016-05-2513:30:00.048","AAPL",98.00,100],
  8. ],
  9. columns=["timestamp","ticker","price","quantity"],
  10. )
  11. trades['timestamp']=pd.to_datetime(trades['timestamp'])

独家分享!5个鲜为人知的Pandas技巧

通过股价报告(tickers)可以合并交易和报价信息,报告中报价可能只比交易迟了10毫秒。如果报价的时间差长于10毫秒,或者没有报价,任何出价和询问报价都是无效的(以苹果股价报告*为例)。

*苹果股价报告:AAPL ticker。

  1. pd.merge_asof(trades,quotes,on="timestamp",by='ticker',tolerance=pd.Timedelta('10ms'),direction='backward')

独家分享!5个鲜为人知的Pandas技巧

4. 创建Excel报告

独家分享!5个鲜为人知的Pandas技巧

Pandas和XlsxWriter库同时使用能够帮助我们创建基于数据框架的Excel 报告。这能节省很多时间,不用再花时间先把数据框架存为csv格式,然后再导入Excel排版。还可以直接加入各种图表等多种便捷操作。

  1. df=pd.DataFrame(pd.np.array([[1,2,3],[4,5,6],[7,8,9]]),columns=["a","b","c"])

以下的一小段代码就创建了一个Excel报告。要想将一个数据框架存储到Excel文件,需要反注释writer.save()行。

  1. report_name='example_report.xlsx'
  2. sheet_name='Sheet1'writer=pd.ExcelWriter(report_name,engine='xlsxwriter')
  3. df.to_excel(writer,sheet_name=sheet_name,index=False)
  4. #writer.save()

正如前文中提到的那样,这个数据库也支持添加图表到Excel报告中。这需要确定图表的类型(本文中是线形图表)以及图表所反映的数据序列,注意,这些数据序列应位于Excel的电子表格程序里(spreadsheet)。

  1. #definetheworkbook
  2. workbook=writer.book
  3. worksheet=writer.sheets[sheet_name]#createachartlineobject
  4. chart=workbook.add_chart({'type':'line'})#configuretheseriesofthechartfromthespreadsheet
  5. #usingalistofvaluesinsteadofcategory/valueformulas:
  6. #[sheetname,first_row,first_col,last_row,last_col]
  7. chart.add_series({
  8. 'categories':[sheet_name,1,0,3,0],
  9. 'values':[sheet_name,1,1,3,1],
  10. })#configurethechartaxes
  11. chart.set_x_axis({'name':'Index','position_axis':'on_tick'})
  12. chart.set_y_axis({'name':'Value','major_gridlines':{'visible':False}})#placethechartontheworksheet
  13. worksheet.insert_chart('E2',chart)#outputtheexcelfile
  14. writer.save()

5. 节省磁盘空间

同时处理几个数据科学项目,结束后通常会有很多从不同实验中得到的预处理数据集。这样笔记本电脑的固态硬盘很快就会被这些数据塞满。Pandas在保存数据集时发挥作用,压缩数据,读取这些数据时又是解压形式。

不妨创建一个随机数字的大Pandas数据框架。

  1. df=pd.DataFrame(pd.np.random.randn(50000,300))

独家分享!5个鲜为人知的Pandas技巧

如果把这个文件存为csv格式,它会占掉硬盘驱动器上300MB的空间。

  1. df.to_csv('random_data.csv',index=False)

通过一个compression=‘gzip’argument,就可以将文件大小缩至136MB。

  1. df.to_csv('random_data.gz',compression='gzip',index=False)

同时,在数据框架上读取gzipped数据也很容易,所以功能上并不会有任何损失。

  1. df=pd.read_csv('random_data.gz')

结语

这些pandas技巧极大的提高了工作效率。希望这篇文章能帮助到你,通过展示pandas新功能,提高你的工作效率。

你最喜欢哪一个pandas技巧呢?

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 08:44
下一篇 2023年5月5日 08:45

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信