数据分析,如何能错过Pandas。
现在,数据科学家RomanOrac分享了他在工作中相见恨晚的Pandas使用技巧。
了解了这些技巧,能让你在学习、使用Pandas的时候更加高效。
话不多说,一起学习一下~
Pandas实用技巧用Pandas做数据分析,最大的亮点当属DataFrame。不过,在展示成果的时候,常常需要把DataFrame转成另一种格式。
Pandas在这一点上其实十分友好,只需添加一行代码。
DataFrame转HTML
如果你需要用HTML发送自动报告,那么to_html函数了解一下。
比如,我们先设定这样一个DataFrame:
importnumpyasnpimportpandasaspdimportrandomn=10df=pd.DataFrame({"col1":np.random.random_sample(n),"col2":np.random.random_sample(n),"col3":[[random.randint(0,10)for_inrange(random.randint(3,5))]for_inrange(n)],})
用上to_html,就可以将表格转入html文件:
df_html=df.to_html()withopen(‘analysis.html’,‘w’)asf:f.write(df_html)
与之配套的,是read_html函数,可以将HTML转回DataFrame。
DataFrame转LaTeX
如果你还没用过LaTeX写论文,强烈建议尝试一下。
要把DataFrame值转成LaTeX表格,也是一个函数就搞定了:
df.to_latex()
DataFrame转Markdown
如果你想把代码放到GitHub上,需要写个README。
这时候,你可能需要把DataFrame转成Markdown格式。
Pandas同样为你考虑到了这一点:
print(df.to_markdown())
注:这里还需要tabulate库
DataFrame转Excel
说到这里,给同学们提一个小问题:导师/老板/客户要你提供Excel格式的数据,你该怎么做?
当然是——
df.to_excel(‘analysis.xlsx’)
需要注意的是,如果你没有安装过xlwt和openpyxl这两个工具包,需要先安装一下。
另外,跟HTML一样,这里也有一个配套函数:read_excel,用来将excel数据导入pandasDataFrame。
DataFrame转字符串
转成字符串,当然也没问题:
df.to_string()5个鲜为人知的Pandas技巧
此前,RomanOrac还曾分享过5个他觉得十分好用,但大家可能没有那么熟悉的Pandas技巧。
1、data_range
从外部API或数据库获取数据时,需要多次指定时间范围。
Pandas的data_range覆盖了这一需求。
importpandasaspddate_from=“-01-01”date_to=“-01-12”date_range=pd.date_range(date_from,date_to,freq=”D”)print(date_range)
freq=“D”/“M”/“Y”,该函数就会分别返回按天、月、年递增的日期。
2、合并数据
当你有一个名为left的DataFrame:
和名为right的DataFrame:
想通过关键字“key”把它们整合到一起:
实现的代码是:
df_merge=left.merge(right,on=‘key’,how=‘left’,indicator=True)
3、最近合并(Nearestmerge)
在处理股票或者加密货币这样的财务数据时,价格会随着实际交易变化。
针对这样的数据,Pandas提供了一个好用的功能,merge_asof。
该功能可以通过最近的key(比如时间戳)合并DataFrame。
举个例子,你有一个存储报价信息的DataFrame。
还有一个存储交易信息的DataFrame。
现在,你需要把两个DataFrame中对应的信息合并起来。
最新报价和交易之间可能有10毫秒的延迟,或者没有报价,在进行合并时,就可以用上merge_asof。
pd.merge_asof(trades,quotes,on=”timestamp”,by=’ticker’,tolerance=pd.Timedelta(‘10ms’),direction=‘backward’)
4、创建Excel报告
在Pandas中,可以直接用DataFrame创建Excel报告。
importnumpyasnpimportpandasaspddf=pd.DataFrame(np.array([[1,2,3],[4,5,6],[7,8,9]]),columns=["a","b","c"])report_name=example_report.xlsxsheet_name=Sheet1writer=pd.ExcelWriter(report_name,engine=xlsxwriter)df.to_excel(writer,sheet_name=sheet_name,index=False)
不只是数据,还可以添加图表。
#definetheworkbookworkbook=writer.bookworksheet=writer.sheets[sheet_name]#createachartlineobjectchart=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],})#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()
注:这里需要XlsxWriter库
5、节省磁盘空间
Pandas在保存数据集时,可以对其进行压缩,其后以压缩格式进行读取。
先搞一个MB的DataFrame,把它存成csv。
df=pd.DataFrame(pd.np.random.randn(,))df.to_csv(‘random_data.csv’,index=False)
压缩一下试试:
df.to_csv(‘random_data.gz’,