Pandas为Python打造了一个高级的运行环境,同时也提供了易于操作的数据结构和分析工具不用多说,Pandas已经是Python中数据分析的常用工具了。作为一名数据科学家,Pandas是我每天都在使用的工具,我总是惊叹于它的强大。这篇文章将解释我最近学到的5个Pandas技巧,这些技巧极大地提高了我的工作效率。对于pandas新手,Pandas为Python编程语言打造了一个高级运行环境,同时也提供了易于操作的数据结构和分析工具。Pandas这个名字来源于“面板数据”,这是计量经济学中的一个术语,它是由同一个人在多个时间段内的观察结果组成的数据集。1.数据范围从外部应用程序接口(API)或数据库中获取数据时,通常需要确定一个数据范围。Pandas可以很好地解决这个问题,它的data_range函数可以产生按日、月、年等递增的日期。假设您现在需要一组按天数递增的数据范围。date_from="2019-01-01"date_to="2019-01-12"date_range=pd.date_range(date_from,date_to,freq="D")date_range将输出的date_range转换为开始和结束日期,这一步可以用Completewith后续功能。fori,(date_from,date_to)inumerate(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:2019-01-01,date_to:2019-01-022.date_from:2019-01-02,截止日期:2019-01-033。date_from:2019-01-03,date_to:2019-01-044。date_from:2019-01-04,date_to:2019-01-055。date_from:2019-01-05,date_to:2019-01-066。date_from:2019-01-06,date_to:2019-01-077。date_from:2019-01-07,date_to:2019-01-088。date_from:2019-01-08,date_to:2019-01-099。date_from:2019-01-09,date_to:2019-01-1010。date_from:2019-01-10,date_to:2019-01-1111。date_from:2019-01-11,date_to:2019-01-122。使用指令合并两个数据集是将它们变成一个数据集的过程,这需要根据它们的共同属性或列来对齐其中的每一行。合并函数中有很多参数(类数组对象对应传递给函数的参数),其中指标(indicator)参数主要可以应用于合并过程,它被添加到数据框(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()both3left_only1right_only0Name:_merge,dtype:int643。最近合并在处理股票或加密货币等金融数据时,还需要将报价(价格变化)与实际交易结合起来。现在,假设目的是将每笔交易与几毫秒前生成的报价合并。Pandas有一个merge_asof函数,它通过最近的键(在本例中为时间戳)合并数据帧。有关报价和交易的数据集可从pandas实例获得。报价数据框包含不同股票的价格变化。通常,报价远多于交易。quotes=pd.DataFrame([["2016-05-2513:30:00.023","GOOG",720.50,720.93],["2016-05-2513:30:00.023","MSFT",51.95,51.96],["2016-05-2513:30:00.030","MSFT",51.97,51.98],["2016-05-2513:30:00.041","MSFT",51.99,52.00],["2016-05-2513:30:00.048","GOOG",720.50,720.93],["2016-05-2513:30:00.049","AAPL",97.99,98.01],["2016-05-2513:30:00.072","GOOG",720.50,720.88],["2016-05-2513:30:00.075","MSFT",52.01,52.03],],columns=["timestamp","ticker","bid","ask"],)quotes['timestamp']=pd.to_datetime(quotes['timestamp'])交易数据框包含不同股票的交易信息。交易=pd.DataFrame([["2016-05-2513:30:00.023","MSFT",51.95,75],["2016-05-2513:30:00.038","MSFT",51.95,155],["2016-05-2513:30:00.048","谷歌",720.77,100],["2016-05-2513:30:00.048","谷歌",720.92,100],["2016-05-2513:30:00.048","AAPL",98.00,100],],columns=["timestamp","ticker","price","quantity"],)trades['timestamp']=pd.to_datetime(trades['timestamp'])可以通过股票价格报告(tickers)结合交易和行情信息。报告中的报价可能只比交易晚10毫秒。如果报价之间的时间差超过10毫秒,或者没有报价(以Apple股价报告*为例),则任何买卖报价均无效。*Apple股价报告:AAPL代码。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='Sheet1'writer=pd.ExcelWriter(report_name,engine='xlsxwriter')df.to_excel(writer,sheet_name=sheet_name,index=False)#writer.save()如上文所述提到,该数据库还支持向Excel报告添加图表。这就需要确定图表的类型(本文中的折线图)以及图表中体现的数据系列。请注意,这些数据系列应该位于Excel电子表格程序(spreadsheet)中。#definetheworkbookworkbook=writer.bookworksheet=writer.sheets[sheet_name]#createachartlineobjectchart=workbook.add_chart({'type':'line'})#configuretheseriessoftthechartfromthespreadsheet#usingalistofvaluesinsteadofcategory/valueformulas:#[sheetname,first_row,first_col,last_row].add_series({'categories':[sheet_name,1,0,3,0],'values':[sheet_name,1,1,3,1],})#configurethechartaxeschart.set_x_axis({'name':'Index','position_axis':'on_tick'})chart.set_y_axis({'name':'Value','major_gridlines':{'visible':False}})#placethechartontheworksheetworksheet.insert_chart('E2',chart)#outputtheexcelfilewriter.save()5.节省磁盘空间同时处理多个数据科学项目通常会得到许多来自不同实验的预处理数据集。所以笔记本电脑的固态硬盘很快就会被这些数据填满。Pandas在保存数据集、压缩数据并以未压缩的形式读回时发挥作用。让我们创建一个随机数的大型Pandas数据框。df=pd.DataFrame(pd.np.random.randn(50000,300))如果将此文件保存为csv,它将占用300MB的硬盘空间。df.to_csv('random_data.csv',index=False)可以通过compression='gzip'参数将文件大小减小到136MB。df.to_csv('random_data.gz',compression='gzip',index=False)同时也很容易读取数据框上gzip压缩后的数据,所以在功能上没有损失。df=pd.read_csv('random_data.gz')结论这些pandas技术大大提高了工作效率。希望本文能通过展示pandas的新特性,帮助您提高工作效率。你最喜欢的熊猫戏法是什么?
