数据结构论坛

首页 » 分类 » 定义 » 独家分享5个鲜为人知的Pandas技巧
TUhjnbcbe - 2025/1/23 18:54:00

全文共字,预计学习时长12分钟

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

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

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

1.数据范围

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

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

date_from=-01-01

date_to=-01-12

date_range=pd.date_range(date_from,date_to,freq=D)

date_range

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

fori,(date_from,date_to)inenumerate(zip(date_range[:-1],date_range[1:]),1):

date_from=date_from.date().isoformat()

date_to=date_to.date().isoformat()

print(%d.date_from:%s,date_to:%s%(i,date_from,date_to))1.date_from:-01-01,date_to:-01-02

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

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

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

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

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

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

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

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

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

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

2.使用指示符合并

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

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

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

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

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

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

df_merge._merge.value_counts()both3

left_only1

right_only0

Name:_merge,dtype:int64

3.最近合并(Nearestmerge)

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

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

quotes=pd.DataFrame(

[

[-05-:30:00.,GOOG,.50,.93],

[-05-:30:00.,MSFT,51.95,51.96],

[-05-:30:00.,MSFT,51.97,51.98],

[-05-:30:00.,MSFT,51.99,52.00],

[-05-:30:00.,GOOG,.50,.93],

[-05-:30:00.,AAPL,97.99,98.01],

[-05-:30:00.,GOOG,.50,.88],

[-05-:30:00.,MSFT,52.01,52.03],

],

columns=[timestamp,ticker,bid,ask],

)

quotes[timestamp]=pd.to_datetime(quotes[timestamp])

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

trades=pd.DataFrame(

[

[-05-:30:00.,MSFT,51.95,75],

[-05-:30:00.,MSFT,51.95,],

[-05-:30:00.,GOOG,.77,],

[-05-:30:00.,GOOG,.92,],

[-05-:30:00.,AAPL,98.00,],

],

columns=[timestamp,ticker,price,quantity],

)

trades[timestamp]=pd.to_datetime(trades[timestamp])

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

*苹果股价报告:AAPLticker。

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

4.创建Excel报告

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

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

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

report_name=example_report.xlsx

sheet_name=Sheet1writer=pd.ExcelWriter(report_name,engine=xlsxwriter)

df.to_excel(writer,sheet_name=sheet_name,index=False)

#writer.save()

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

#definetheworkbook

workbook=writer.book

worksheet=writer.sheets[sheet_name]#createachartlineobject

chart=workbook.add_chart({type:line})#configuretheseriesofthechartfromthespreadsheet

#usingalistofvaluesinsteadofcategory/valueformulas:

#[sheetname,first_row,first_col,last_row,last_col]

chart.add_series({

categories:[sheet_name,1,0,3,0],

values:[sheet_name,1,1,3,1],

})#configurethechartaxes

chart.set_x_axis({name:Index,position_axis:on_tick})

chart.set_y_axis({name:Value,major_gridlines:{visible:False}})#placethechartontheworksheet

worksheet.insert_chart(E2,chart)#outputtheexcelfile

writer.save()

5.节省磁盘空间

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

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

df=pd.DataFrame(pd.np.random.randn(,))

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

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

通过一个

1
查看完整版本: 独家分享5个鲜为人知的Pandas技巧