|
|
51CTO旗下网站
|
|
移动端

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

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

作者:读芯术来源:今日头条|2019-11-20 10:54

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

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

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

1. 数据范围

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

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

  1. date_from ="2019-01-01" 
  2.  
  3. date_to = "2019-01-12" 
  4.  
  5. date_range = pd.date_range(date_from, date_to, freq="D"
  6.  
  7. date_range 
独家分享!5个鲜为人知的Pandas技巧

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

  1. for i, (date_from, date_to) inenumerate(zip(date_range[:-1], date_range[1:]), 1): 
  2.  
  3. date_from = date_from.date().isoformat() 
  4.  
  5. date_to = date_to.date().isoformat() 
  6.  
  7. 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()both 3 
  2.  
  3. left_only 1 
  4.  
  5. right_only 0 
  6.  
  7. Name: _merge, dtype: int64 

3. 最近合并(Nearest merge)

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

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

  1. quotes = pd.DataFrame( 
  2.  
  3.  
  4. ["2016-05-2513:30:00.023""GOOG", 720.50, 720.93], 
  5.  
  6. ["2016-05-2513:30:00.023""MSFT", 51.95, 51.96], 
  7.  
  8. ["2016-05-2513:30:00.030""MSFT", 51.97, 51.98], 
  9.  
  10. ["2016-05-2513:30:00.041""MSFT", 51.99, 52.00], 
  11.  
  12. ["2016-05-2513:30:00.048""GOOG", 720.50, 720.93], 
  13.  
  14. ["2016-05-2513:30:00.049""AAPL", 97.99, 98.01], 
  15.  
  16. ["2016-05-2513:30:00.072""GOOG", 720.50, 720.88], 
  17.  
  18. ["2016-05-2513:30:00.075""MSFT", 52.01, 52.03], 
  19.  
  20. ], 
  21.  
  22. columns=["timestamp","ticker""bid""ask"], 
  23.  
  24.  
  25. quotes['timestamp'] = pd.to_datetime(quotes['timestamp']) 
独家分享!5个鲜为人知的Pandas技巧

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

  1. trades = pd.DataFrame( 
  2.  
  3.  
  4. ["2016-05-2513:30:00.023""MSFT", 51.95, 75], 
  5.  
  6. ["2016-05-2513:30:00.038""MSFT", 51.95, 155], 
  7.  
  8. ["2016-05-2513:30:00.048""GOOG", 720.77, 100], 
  9.  
  10. ["2016-05-2513:30:00.048""GOOG", 720.92, 100], 
  11.  
  12. ["2016-05-2513:30:00.048""AAPL", 98.00, 100], 
  13.  
  14. ], 
  15.  
  16. columns=["timestamp","ticker""price""quantity"], 
  17.  
  18.  
  19. 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.  
  3. sheet_name = 'Sheet1'writer = pd.ExcelWriter(report_name,engine='xlsxwriter'
  4.  
  5. df.to_excel(writer, sheet_name=sheet_name, index=False
  6.  
  7. # writer.save() 

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

  1. # define the workbook 
  2.  
  3. workbook= writer.book 
  4.  
  5. worksheet = writer.sheets[sheet_name]# create a chart lineobject 
  6.  
  7. chart = workbook.add_chart({'type''line'})# configurethe series of the chart from the spreadsheet 
  8.  
  9. # using a list of values instead of category/value formulas: 
  10.  
  11. # [sheetname, first_row, first_col,last_row, last_col] 
  12.  
  13. chart.add_series({ 
  14.  
  15. 'categories': [sheet_name, 1, 0, 3,0], 
  16.  
  17. 'values': [sheet_name, 1, 1, 3, 1], 
  18.  
  19. })# configure the chart axes 
  20.  
  21. chart.set_x_axis({'name''Index''position_axis''on_tick'}) 
  22.  
  23. chart.set_y_axis({'name''Value''major_gridlines': {'visible':False}})# place the chart on the worksheet 
  24.  
  25. worksheet.insert_chart('E2', chart)# output the excel file 
  26.  
  27. 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技巧呢?

【编辑推荐】

  1. 地产大佬潘石屹:人生苦短,我要学Python
  2. 32个常用 Python 实现
  3. Python 实现docx文件的读写操作
  4. 女朋友背着我,用 Python 偷偷隐藏了她的行踪
  5. 如何修复使用Python ORM工具SQLAlchemy时的常见陷阱
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

骨干网与数据中心建设案例

骨干网与数据中心建设案例

高级网工必会
共20章 | 捷哥CCIE

389人订阅学习

中间件安全防护攻略

中间件安全防护攻略

4类安全防护
共4章 | hack_man

140人订阅学习

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

286人订阅学习

读 书 +更多

网管第一课——计算机网络原理

本书是《网管第一课》系列图书中的第一本,是专门针对高校和培训机构编写的,其主要特点是内容细而精、针对性强。书中内容全是经过精心挑选...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微