不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

新闻 前端
数据分析,如何能错过 Pandas 。现在,数据科学家 Roman Orac 分享了他在工作中相见恨晚的 Pandas 使用技巧。

 本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

数据分析,如何能错过 Pandas 。

现在,数据科学家 Roman Orac 分享了他在工作中相见恨晚的 Pandas 使用技巧。

了解了这些技巧,能让你在学习、使用 Pandas 的时候更加高效。

[[319185]]

话不多说,一起学习一下~

Pandas实用技巧

用 Pandas 做数据分析,最大的亮点当属 DataFrame。不过,在展示成果的时候,常常需要把 DataFrame 转成另一种格式。

Pandas 在这一点上其实十分友好,只需添加一行代码。

DataFrame 转 HTML

如果你需要用 HTML 发送自动报告,那么 to_html 函数了解一下。

比如,我们先设定这样一个 DataFrame:

  1. import numpy as np 
  2. import pandas as pd 
  3. import random 
  4.  
  5. n = 10 
  6. df = pd.DataFrame( 
  7.     { 
  8.         "col1": np.random.random_sample(n), 
  9.         "col2": np.random.random_sample(n), 
  10.         "col3": [[random.randint(010for _ in range(random.randint(35))] for _ in range(n)], 
  11.     } 

用上 to_html,就可以将表格转入 html 文件:

  1. df_html = df.to_html() 
  2. with open(‘analysis.html’, ‘w’) as f: f.write(df_html) 
不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

与之配套的,是 read_html 函数,可以将 HTML 转回 DataFrame。

DataFrame 转 LaTeX

如果你还没用过 LaTeX 写论文,强烈建议尝试一下。

要把 DataFrame 值转成 LaTeX 表格,也是一个函数就搞定了:

  1. df.to_latex() 
不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

DataFrame 转 Markdown

如果你想把代码放到 GitHub 上,需要写个 README。

这时候,你可能需要把 DataFrame 转成 Markdown 格式。

Pandas 同样为你考虑到了这一点:

  1. print(df.to_markdown()) 
不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

注:这里还需要 tabulate 库

DataFrame 转 Excel

说到这里,给同学们提一个小问题:导师/老板/客户要你提供 Excel 格式的数据,你该怎么做?

当然是——

  1. df.to_excel(‘analysis.xlsx’) 

需要注意的是,如果你没有安装过 xlwt 和 openpyxl 这两个工具包,需要先安装一下。

另外,跟 HTML 一样,这里也有一个配套函数:read_excel,用来将excel数据导入pandas DataFrame。

DataFrame 转字符串

转成字符串,当然也没问题:

  1. df.to_string() 

5个鲜为人知的Pandas技巧

此前,Roman Orac 还曾分享过 5 个他觉得十分好用,但大家可能没有那么熟悉的 Pandas 技巧。

1、data_range

从外部 API 或数据库获取数据时,需要多次指定时间范围。

Pandas 的 data_range 覆盖了这一需求。

  1. import pandas as pd 
  2. date_from = “2019-01-01” 
  3. date_to = “2019-01-12” 
  4. date_range = pd.date_range(date_from, date_to, freq=”D”) 
  5. print(date_range) 

freq = “D”/“M”/“Y”,该函数就会分别返回按天、月、年递增的日期。

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

2、合并数据

当你有一个名为left的DataFrame:

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

和名为right的DataFrame:

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

想通过关键字“key”把它们整合到一起:

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

实现的代码是:

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

3、最近合并(Nearest merge)

在处理股票或者加密货币这样的财务数据时,价格会随着实际交易变化。

针对这样的数据,Pandas提供了一个好用的功能,merge_asof

该功能可以通过最近的key(比如时间戳)合并DataFrame。

举个例子,你有一个存储报价信息的DataFrame。

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

还有一个存储交易信息的DataFrame。

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

现在,你需要把两个DataFrame中对应的信息合并起来。

最新报价和交易之间可能有10毫秒的延迟,或者没有报价,在进行合并时,就可以用上 merge_asof。

  1. pd.merge_asof(trades, quotes, on=”timestamp”, by=’ticker’, tolerance=pd.Timedelta(‘10ms’), direction=‘backward’) 
不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

4、创建Excel报告

在Pandas中,可以直接用DataFrame创建Excel报告。

  1. import numpy as np 
  2. import pandas as pd 
  3.  
  4. df = pd.DataFrame(np.array([[123], [456], [789]]), columns=["a""b""c"]) 
  5.  
  6. report_name = 'example_report.xlsx' 
  7. sheet_name = 'Sheet1' 
  8. writer = pd.ExcelWriter(report_name, engine='xlsxwriter'
  9. df.to_excel(writer, sheet_name=sheet_name, index=False) 

不只是数据,还可以添加图表。

  1. # define the workbook 
  2. workbook = writer.book 
  3. worksheet = writer.sheets[sheet_name] 
  4. # create a chart line object 
  5. chart = workbook.add_chart({'type''line'}) 
  6. # configure the series of the chart from the spreadsheet 
  7. # using a list of values instead of category/value formulas: 
  8. #     [sheetname, first_row, first_col, last_row, last_col] 
  9. chart.add_series({ 
  10.     'categories': [sheet_name, 1030], 
  11.     'values':     [sheet_name, 1131], 
  12. }) 
  13. # configure the chart axes 
  14. chart.set_x_axis({'name''Index''position_axis''on_tick'}) 
  15. chart.set_y_axis({'name''Value''major_gridlines': {'visible': False}}) 
  16. # place the chart on the worksheet 
  17. worksheet.insert_chart('E2', chart) 
  18. # output the excel file 
  19. writer.save() 

注:这里需要 XlsxWriter 库

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

5、节省磁盘空间

Pandas在保存数据集时,可以对其进行压缩,其后以压缩格式进行读取。

先搞一个 300MB 的 DataFrame,把它存成 csv。

  1. df = pd.DataFrame(pd.np.random.randn(50000,300)) 
  2. df.to_csv(‘random_data.csv’, index=False) 

压缩一下试试:

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

文件就变成了136MB。

不容错过的Pandas小技巧:万能转格式、轻松合并、压缩数据

gzip压缩文件可以直接读取:

  1. df = pd.read_csv(‘random_data.gz’) 

这一份Pandas技巧笔记,暂且说到这里。各位同学都做好笔记了吗?

Talk is cheap, show me the code。学会了,就用起来吧

责任编辑:张燕妮 来源: 量子位
相关推荐

2011-03-01 09:17:34

Linux命令行

2019-08-09 18:08:13

程序员技能开发者

2024-01-31 11:55:16

数据分析数据计算收支

2013-10-31 13:30:36

设计专题

2016-02-29 15:00:48

2023-08-03 07:44:09

MSBuild.NET

2015-09-17 17:37:57

工具程序开源

2023-06-29 17:53:00

VSCode插件程序

2014-07-10 10:56:21

jQuery

2019-10-29 09:00:00

AIOps人工智能

2022-09-22 16:17:12

css编程语言开发

2018-08-01 14:57:57

数据科学机器学习社区

2016-09-21 15:31:24

数据 峰会

2013-08-19 10:45:42

华为HCC大会HCC2013华为

2020-05-08 09:13:48

前端开发

2019-07-04 08:00:00

MySQL存储开发

2014-08-26 10:38:23

AppAndroid Wea应用

2020-08-05 10:13:14

JavaScript开发

2020-01-14 10:17:13

深度学习人生第一份工作人工智能

2024-01-25 18:08:57

CSSHTML文件
点赞
收藏

51CTO技术栈公众号