用了三年的 pandas 速查表!.docx

上传人:夺命阿水 文档编号:146934 上传时间:2022-12-27 格式:DOCX 页数:17 大小:77.47KB
返回 下载 相关 举报
用了三年的 pandas 速查表!.docx_第1页
第1页 / 共17页
用了三年的 pandas 速查表!.docx_第2页
第2页 / 共17页
用了三年的 pandas 速查表!.docx_第3页
第3页 / 共17页
用了三年的 pandas 速查表!.docx_第4页
第4页 / 共17页
用了三年的 pandas 速查表!.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《用了三年的 pandas 速查表!.docx》由会员分享,可在线阅读,更多相关《用了三年的 pandas 速查表!.docx(17页珍藏版)》请在课桌文档上搜索。

1、Ol环境搭建# https:mirrors.tuna.tsinghua.edu.Cnanacondaarchive# anacondaminiconda# https:dOCS.Conda.ioenIateSt/miniconda.html# excel处理相关包xlrd/openpyxl/lsxwriter# 解和网页包requests/IXmI/html51ib/BeaUtifUlSOUP4# 计算包:SCiPypipinstalljupyterpandasmatplotlib# 国外网络慢,可指定国内源快速卜载安装PiPinstallPandaS-ihttps/PyPConda多Pyth

2、on版本环境:# 创建新环境,环境名称,Python版本condacreate-npy39python=3.9# 删除环境condaremove-npy39;-all# 进人、激活环境condaactivatepy39# 退出环境一condadeactivate# 查看所有虚拟环境及当前环境condainfo-e02JupyterNotebook快捷键gJupyterNotebook:jupyternotebook快捷键及功能: :代码提示 Shift+Enter:执行本行并定位到新增的行 Shift+Tab(l-3次):查看函数方法说明 D,D:双击D删除本行 A/B:向上/下增加一行 M/

3、Y:Markdown/代码模式03导入库包importpandasaspd#最新为1.4.1版本(2022-02-12)importnumpyasnpimportmatplotlib.pyplotaspitimportseabornassnS%matplotlibinline04导入数据# 从csv文件导入数据pd.read_csv(,file.csv,name=列名L列名2)# 从限晶隔符的文本文件导入数据pd.read_table(filename,header=0)# Excel导入,指定sheet和表头pd.read_excel(,file.xlsx,sheet-name,表:T,he

4、ader=0)SQ表/库导入数据pd.read_sql(query,connection_object)# 从JSoN格式的字符串导入数据pd.read_json(json-string)# 解析URL,.抨HTML文件,抽取其中的tables表格pd.read_html(url)# 从你的粘贴板获取内容,并传给read=Jab1e()pd.read_clipboard()# 从字庇象导入数据,Key1WVaIUe是数据pd.DataFrame(dict)# 导入字符串fromioimportStringIOPd,read_csv(Stringlo(Web_data,text)05导出输出数据

5、# 导出数据到CSV文件df.to_csv(filename.csv)万寻H据到EXCel文件dfo-eceljEfilename.xls,index=True)# 导出数据到SQL表df.to_sql(table-namejconnection_object)# 以JSon格式导出数据到文本文件son(filename)# 其他df.to-html()#显示HTML代码df.to-markdown()#显示markdown代码df.to,string()#显示格式化字符df.to_latex(Index=False)#LaTeXtabular,Iongtabledf.to_dict(,spl

6、it)#字巾!,格list/series/records/indexdf.to-clipboard(sep=,index=False)#疗大系统剪贴板# 将两个表格输出到一个excel文件里面,导出到多个sheetwriter=pd.ExcelWriter(,new.xlsx,)df_l.to-excel(writersheet-name=,第一个,index=False)df_2.to-excel(writerjSheeJname=第二个,index=False)writer.save()#必须运行Writer.save(),不然不能输出到本地# 写法2withpd.ExcelWriter(

7、,new.xlsx,)aswriter:dfl.to-excel(writerjSheet_name=第一个)df2.to-excel(writerjSheet_name=第二个)# 用XlSXWxiter导出支持合并单薪、颜色、图表等定制功能# https:XlSXWriter.readthedocs.io/working_with_pandas.html06创建测试对象# 创建20行5列的随机数组成的DataFrame对象pd.DataFrame(np.random.rand(20,5)# 从可迭代对象仓IJ建个SerieS对象pd.Series# 增加一个日期索引df,index=pd,

8、date_range(190。/1/301PeriodS=dfshape0)# 创建随机数据集df_pd.util.testing.makeDataFrame()# 创建随机日期索引数据集df=pd.UtiKtesting.makePeriodFrame()df=pd.util.testing.maj丽F第()# 创建随机混合类型数据集df=pd.util.testing.makeMixedDataFrame()07查看、检查、统计、属性df.head(n)#查看DataFrame对象的前行df.tail(n)#查看DataFrame对象的最后n行df.sample(n)#查看n个样本,随机d

9、f.ShaPe#查看彳了数和歹IJ数dfinfo()#查看索引、数据类型和内存信息df.describe。#查看数值型列的汇总统计df.dtypes#查看各字段类型df.axes#厂小次据列名df.mean()#_返网所9列的均值df.mean(l)#返回所不行的均值,下同df.corr()#返回列4列之间的相关系数df.count()#返回每列中的非空值的个数df.max()#必;df.min()#返回每一列的最小值dfmedian()#返回每一列的中位数df.std()#返回每一列的标准差dfrvan。#方承5 .mode()#众数6 .prod()#连乘S.cUmprod()#么犷工农,

10、累df.cumsum(axis=0)#累;积连加,累加s.nunique()#去Hm:,不I同值的示df.idxmax()#每列酸大的值的索引名df.idxmin()#最小df.columns#显示所有列名dfteam.unique。#显示列中的不重复值#查看SerieS对象的唯一值和计数,计数占比:normalize=True5. valueoUntS(dropna=False)# 查看DataFrame对象中每一歹IJ的唯一值和计数df.aPPly(Pd.Series,valueounts)df.duplicated()#重复行df.drop-duplicates()#删除重复行# set

11、_oPtiOrI、resejoption、describe_oPtiOn设置显示要求pd.get_option()# 世置行列最大显示数量,None为不限制pd.options.display.max_rows-Nonepd.opionsisplay.max_columns=Nonedfcolargmin()#最大值最小值argmax()所在位置的自动索引df.col.idxmin()#最大值最小值idxmax()所在位置的定义索引#累计统计ds.cumsum()#前边所有值之和ds.cumprod()#的边所有值之积ds.cummax()#前边所有值的晏大值ds.cummin()#前边所有值

12、的最小值#窗口计算C衮动计算)ds.rolling(x).sum()Lds.rolling(x).mean()#依次计算相邻X个元素的算术平均dsrolling(x)var()#依次计算相邻X个元索的方差dsrolling*)std()#依次计算相邻X个元素的标准疝ds.ro11ing(x).min()#依次计算相邻X个元素的最小值dsrolling。).max()#依次计算相邻X个元素的最大值08数据清理df.columns=,a=5,BBB1CCC=555#替换数据dfpF=df.site_id.map(2:,小程序7:,M站)#将枚举换成名称pd.isnull()#检查DataFrame

13、对象中的空值,并返回、Bo。Iean数组pcLnotnull。#检查DataFrame对象中的非空值,并返回一,个BoOlean数组df.drop(name,axis=1)#IW除列df.drop(0,10,axis=。)#删除行deldfname#胪UERdf.dropna()#删除所有包含空值的行df.dropna(ais=l)#丽!所宥包空隹的列df.dropna(axis=l,thresh=n)#删除所有小于n个非空值的行dffillna(x)#用X替换DataFrame对象中所有的空值dffi:Llna(ValUe=prov:,未知,)#指定列的空值替换为指定内一sastype(fl

14、oat)#将SerieS中的数据类型更改为float类型df.index.astype(datetime64ns)#转化为时间格式sreplace(l,one)#用代替所有等于工的值s.replace(l,3,one,three)#one-;three代;3df.rename(columns=lambdax:x+1)#批后更改列7:df.rename(columns=,old-name,:,new_name)#选择叶电改列2df.set_index(,column-one,)#更改索引刊df.rename(index=lambdax:x+1),JI#重新命名表头名称什.co:LUlnnS=U1

15、DI,当前待打款金额认证姓名一dfl是否设置提现账号=df状态#复制一列dfrloc:,:1#列顺序反转df71oc:二1#行顺芹反转,卜方为重新定义索引df,loc:-1.reset_index(drop=True)09数据处理:Filter、Sort# 型留小数修一四舍六入五成双df.round(2)#全甑df.round(,A:1,C,:2)#指定列dfName=df.Name#dfdf.index=Jude,#按索/T河变.indexdfdfco10.5#选择COl列的值大于0.5的行# 多条件查询df(dfteam=A)&(df,Ql,80)&df.utype.isin(l老客,老访

16、客)# 筛选为空的内容dfdf.order.isnull()# 类似SQLWhereindfdf.team.isin(,A,B)df(dfteam=B)&(df.Q1=7)df(dfteam=A)(dfQl80)#非,或dfdf.Name.str.contains(,SK,)#:df,sort_values(coll)#按照列CoIl排序数据,默认升序排列df2col1.SOrJVaIUeS()#同上,-Sdf.sort_values(col2,ascending=False)#按照列coll降序排列数据# 先按列811升序排列,后按812降序排列数据df.sort_values(coll,c

17、ol2jascending=True,False)df2=pd.get_dummies(df,prefix=t_)-,k.set-indexQjplot()# 多索引处理dd.set-inde(,utype,site_id,p_day,jinplace=rue)ddsort_index(inplace=True)#按索弓I排序dd.loc1新访客,2,2019-06-22.plot.barh()#Ioc披口忆定索jl内容# 前10。行,不能指定行,如:df100df:100# 只取指定行dfl=df.loc0:,设计师IDl姓名# 将ages平分成5个区间并指定IabeISages=np.ar

18、ray(l,5j10,40,36,12,58,62,77,89,100,18,20,25,30,32)pd.cut(ages,0,5,20,30,50,100,IabelS=u婴儿青年“,u“中年“,u“壮年,,u“老年”)daily_index.difference(df_work_day.index)#取出箫别# 格斯匕dfindex.name#索弓I的名称Strdfcolumns.tolist()df.values.tolistdf.总人口.values.tolist()data.apply(np.mean)#:;DataFrame列,1函数np.meandata.apply(np.ma

19、xjaxis=l)#x-;DataFrame中的每彳丁用函数np.maxdf.insert(ljthreej12,allow_duplicates=False)#插入列(位置、列名、值)df.pop(class,)#删除列_# 增加一行df.append(pd.DataFrame(one,:2,two:3,three:4.4),index=f),sort=TrUe)# 指定新列iris.assign(sepal_ratio=irisSepalWidth/irisSepalLength).head()df.assign(rate=lambdadf:df.orders/df.uv)# Shift函

20、数是对数据进行平移动的操作肝增幅=df国内生产总值上国内生产总值.shiFt(idf.tshift(l)#时间移动,按周期# 和上相同,diff函数是用来将数据进行移动之后与原数据差# 异数据,等于df.shift()-dfdf增幅=肝国内生产总值.diff(-l)# 留存数据,因为最大一般为数据池df.apply(lambda:xx.max(),ais=l)# 取best列中值为列名的值写到name行上df,value=df.lookup(dfnamejdf,best,)s.where(s1,10)#.二泣(10.NaN)s.mask(s0)#济卜涉足条件的,其他的默认为NaN# 期有值加1

21、(加减乘除等)链式调用函数,f(df)=df.pipe(f)by):=df.copy()=result.groupby(by).sum() resultdf+1/df.add(l)#管道方法,defgb(df,resultresultreturn# 调用df.pipe(gb,by=team)# 窗口计算is为两秒df.rolling(2).sum()# 在窗口结果基础上的窗口计算df.epanding(2).sum()# 超出(大于、小于)的值替换成对应值df.clip(-4,6)# AB两列想加增加C歹IJdf,C,=df.evalfA+Bll# 和上相同效果df.eval(,C=A+B,I

22、nplace=True)# 数列的变化百分比S.PCt_change(PeriodS=2)# 分位数,可实现时间的中间点df.quantile(.5)# 排名average,min,max,first,dense,默认averages.rank()# 数据爆炸,将本列的类列表数据和其他列的数据展开铺开df.explode(1A# 枚举更新StatUS=0:未执行L1:执行中,2:执行完毕,3:执行异常df,taskStatus,=df,taskStatus,.apply(status.get)dfassign(金额=0)#新增守段_df.loc(bar,two),A#多索引色询一df.quer

23、y(i0=b&il=,b,)#多索用查询方法2# 取多索引J旨鳏别的所有不量复值df.index.get_level_values(2).unique()# 去掠为零小数,12.00-12df.astype(,str,).applymap(lambdax:x.replace(,.00,)# 插入数据,在第二列加入两倍列df.insert(3j两倍,df值*2)# 漳第dfgender,=df.gender.map(male,:男,female*:女,)# 增加本行之和列dfCol_sum=df.apply(lambdax:XJLSUm(),axis=l)# 对指定行进行加和col-list=l

24、ist(df)2f#取请假,“:Jln页dfCOlZii藐JTSUm(axis=i)77M二j天数# 对列求和,汇总一df.Ioccol_sum=df.apply(lambda:.sum()# 按指定的列表顺序显示df.reindex(order_list)# 按指定的多列排序df.reindex(,col_5,axis=columns)10数据选取dfcol#根据列名,并以SerieS的形式返回列dfcoll,col2#以DataFrameZj弋返回多列df.locdf)teanf=,B,name,#饭工name川5.110 c0#按位滑选取数据5.111 ,index_one#df.loc

25、0Aj,B#A到BE莅的第一行df.loc2018:1990,第一产业增加值第三产业增加值,df.loc0,AB#d.loc位:叨,丁段df.iloc0j7#返回第二行;i嬴只能是数字dfiloc0,0#返回第一列的第一个元索一dequery(*site_id8andIrtyPe=老客,).head()#可以andOr/&#迭代器及使用-foridxjrowindf.iterrows():row*J.d# 迭代器对每个元素进行处理一dfloci,1链接,=f,http:/WWW,gairuo,COmpslughtm/foriindf.Name2print(i)#迭代一个列# 按列迭代,列名,列

26、中的数据序列S(索引名值)forlabel,contentindf.items():print(label,content)# 按行迭代,迭代出整行包括索引的类似列表的内容,可row2取forrowindf.itertules():print(row)dfat2018,总人口#按行列索引名取一个指定的单个元素df.iatl,2#索川和列.女单个元s.nlargest(5).nsmallest(2)#最大和最小的前几个值df.nlargest(3,population,GDP)df.take(0,3)#指定多不行列位置的内容#按行列截取掉部分内容,支持日期索引标签ds.truncate(befo

27、re=2jafter=4)#籽datafname转成seriesdf.iloc:,0float(str(val).rstrip(,%)#门分数转数Tdfreset_index(inp1ace=rue)#取消索引11数据处理GroupBy透视df.groupby(col)#返Fn个按歹UCOl进行分组的GroUPby对象df.groupby(coll,col2)#返回一,个按多列进行分组的GroUPby对象df.groupby(coll)col2#返回按列COll进行分组后,列COl2的均值#创建个按列CoIl进行分组,并计算COI2和col3的最大值的数据透视装df.pivot_table(i

28、ndex=coll,VaIUeS=col2,co3,aggfunc=max,as_indeX=FaISe)#同上df.pivot_table(index=site_id,utype,values=,uv_all,regist-num,aggfunc=max,mean)df.groupby(coll).agg(np.mean)#返回按列coll分组的所有列的均值#菽初将其他列转行pd.melt(df,id_vars=day,var-name=,city,value-name=,temperature,)# 交叉表是用于统计分组频率的特殊透视表pd.crosstab(df.Nationality,

29、df.Handedness)# groupby后排序,分组agg内的元素取固定个数IZdf(df.p-day=20190101).groupby(p_day,,name,)agg(uv=sum).sort_values(,p-day,uv,ascending=False,False).groupby(level=).head(5)#.unstack().Plot()# 合并查询经第一个看(max,minjlast,size:数量)df.groupby(,结算类型).first()# 合并明细并分组统计加总(max,mearf,median,# prod,sum,std,var,nunique)

30、JnUniqUe为去重的歹IJ表dfl=df.groupby(by=设计师ID).agg(结算金额:SUm)df.groupby(by=df.pf)1ip.nunique()#groupbydistinct,分组+去市数dfgroupby(by=df.pf).ipvaIUJCOUntS()#groupby分组+去重的值及数量df.groupby(,name,).agg(sum,,median,count)12数据合并# 合并拼接行# 将df2中的行添加到dfl的尾部dfl.append(df2)# 7旨定列合并成一个新表新列一ndf=(df提名1.append(df提名2,ignore_ind

31、ex=True).append(df,提名3*,ignore_index=True2)ndf=pd.DataFname(ndf,COlUmnS=(姓名)# 将df2中的列添加到dfl的尾部一df,concat(dL,df2,axis=l)# 合并文件的客行一dfl=pd.read_csv(111.csv,sep=t)df2=pd.read_csv(,222.csv,sep=,t)excel_list=dfl,df2# result=pd.concat(excel_list).fillna(j):.astype(lstZ)result=pd.concat(ecellist)1result.to_

32、excelX2333ls,index=False)# 合并指定目录下所有的excel(CSV)文件importglobfiles=glob.glob(data/cs*.xls)dflist=口foriinfiles:dflist.append(pd.read-ecel(i,USeCoIS=FD时间1名称)df=pd.concat(dflist)# 谷并增加列# Jdfl的列和df20啰执SQL形式的joindfl.join(df2,on=coll,how=inner)# 用key合并两个表df_all=pd.merge(df_sku,df_spu,how=,left,Ieft_on=df_sk

33、uJprodUCjid,right_on=df_spup.ProdUCt_id)13时间处理时间序列# 时间索引_df.index=pd.DatetimeInde(df.index)# 前间只保留而一dfdate*=dftime.dt.date# 将指定字段格式化为时间英型;dfdate=pd.to_datetime(df时间)# 转化为北京时间dftime=dftime.dt.tz_convert(,AsiaShanghai,)# 转为指定格式,可能会失去秒以后的精度df,time,=df,time.dt.Strftime(,%Y-%m-%dde.index=pd.to_datetime(d

34、c.index,format=,%Y%m%d,errors=ignore,)# 时间,参与运算pd.DateOffset(days=2)# 当前时间pd.Timestamp.now()pd.to_datetime(today,)# 判断时间是否当天pd.datetime.today()year=df.start_work.dt.yeardf.time.astype(datetime64ns).dt.datepd.to_datetime(,today)# 定义个天数一importdatetimedays=Iambdax:datetimethnedelta(days=x)days(2)#同上,直接

35、用Pd包装的pd.Timedelta(days=2)#UniX时间戳pd.to-datetime(tedUnit=ms)# 按月(YMDHminS)采集合计数据CHr5et.indexCdatel)resamPIecMl),quantity*.sum()df.set-index(date).groupby(name),extprice.resample(M).sumz# 按天汇总,index息datetime时间类型df.groupby(by=df.index.date).agg(uu,:count)# 按周汇总df.gropby(by=df.index.weekday).uu.count()

36、# 按月进行汇总df.groupby(name,pd.Grouper(key=date,freq=M),extprice.sum()# 按月进行汇总df.groupby(pd.Grouper(key=day,freq=IM).sum()# 按照年度,且截止到12月最后一天统计extPriCe的SUm值df.groupby(name,pd.Grouper(key=date,freq=,A-DEC),extprice.sum()# 按月的平均重新采样dfClose.resample(,M,).mean()# https:/pandas.pydata.org/pandas-docsStabIeuse

37、jguide/timeseries.html#OffSet-aIiaSeS# 取时间范围,并取工作日rng=pd.date_range(start=6/1/2016,end=6302016,freq=B)# 重新定时数据频度,按一定补充方法一df.asfreq(,D,method=pad)# 时区,df.tzconvert(ropeBerlir)df.time.tz-localize(tz=,Asia/Shanghai)# 转北京时间dfTime=dfTime.dt.tz-localize(,UTC,).dt.tz-convert(AsiaShanghai,)# 查看所有时区fromPytZi

38、mporta1l_timezonesPrint(allimezones)# 时长,多久,两个时间间隔时间,时差df,duration=pd.to_datetime(dfend*)-pd.to_datetime(dfbegin,)# 指定时间进行对比df.Time.astype(datetime64ns,)0F?SUbSet=Pd工ndexSlice:,B1,C*)# 最大值最小值加背景色df.style.highlight_max(color=lightgreen,).highlightJnin(COIor=#Cd4f39,)df.style.format(,:.2%,subset=pd.In

39、deSlice:iB)#1W# 指定各列的样式formaJdiCt=sum*:.0f,date:z%Y-%m,pct_of_total:.2%c=str.upper)#一次性样式设置(df.style.format(format_dict)#多仲式口试.hide-inde()# 指定列秘颉色深庞袅示值大小,cmapjmatplotlibcolormap.background-gradient(subset=sum_num,cmap=,BuGn)# 表格内作横回ibar代表值大二.bar(color=#FFA07A,vmin=100_000,subset=sumjalign=zeroZE# 表格

40、内作横向bar代表值大小.bar(color=Iightgreen,vmin=0,subset=,pct_of_total,align=zero,)# 卜.降(小于0)为红色,上升为绿色.bar(color=,ttffe4e4,#bbf9cevmin=0,VfnaX=1,subset=率,align=zero)# 给样式表格赶.set_caption(2018SalesPerformance)_hide-inde()# 按条件给整行加背景色(样式厂defbackground_color(row):ifrow.pv_num=1000。:return,background-color:red上len(row)elifrow.pv_num=100:return,background-color:yellow*len(row)return*len(row)# 使用df.style.apply(background_color,axis=l)16表格中的直方图,sparkline图形importspark

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号