您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > pandas常用操作
DataFrame的结构对DataFrame昀直观的理解就是它一个Excel文件。DataFrame的一列就是Series,Series转为dataframe可以采用函数to_frame列名称与数字运算,表示列中每一个元素都与该数字进行同样的操作#设置最大列数和最大行数pd.set_option(max_columns,10,max_rows,20)#以下内容中df表示一个dataframecolumns=df.columnsindex=movie.indexdata=movie.values#以下内容中director类型为Seriesdirector.to_frame()director.value_counts()#countsalltheoccurrencesofeachuniquevaluedirector.sizedirector.shapedirector.count()#returnsthenumberofnon-missingvaluesdirector.min()director.max()director.median()director.std()director.sum()director.describe()#returnboththesummarystatisticsandafewofthequantilesdirector.isnull()#非空值director.fillna(0)#用0来补充缺失值#上述函数可以结合使用。director.isnull().sum()#统计空值的个数创建、删除列,通过[列名]来完成DataFrame基本操作选取多个DataFrame时,参数用中括号[]括起来methodchaining:用点记号表示函数调用顺序的方式,示例如下,方法链的要求为返回值必须为另外一个对象。特殊的列选择,NOT行movie=pd.read_csv('data/movie.csv')imdb_score=movie['imdb_score']imdb_score+1#每一个列值加1imdb_score*2.5imdb_score7#判断每一个列值是否大于7imdb_score==hello#判断是否等于字符串imdb_score.floordiv(7) #imdb_score//7imdb_score.gt(7) #imdb_score7director.eq('JamesCameron') #director=='JamesCameron'type(imdb_score)imdb_score.astype(int).mod(5)#每一个列值取模#set_index()给行索引命名movie2=movie.set_index('movie_title')movie2.reset_index()#复原索引movie.rename(index=,columns=)#其中参数值为键值对,键为旧值,值为新值。movie.columns.tolist()movie.columns=new_columnsmovie[new_col]=0movie[new_col].all()#用来检测所有的布尔值都为True,用于比较两列是否相等。movie=pd.read_csv('data/movie.csv')movie[['actor_1_name','actor_2_name',]]#里面那个[]不要少person.drive('store')\.buy('food')\.drive('home')\.prepare('food')\.cook('food')\.serve('food')\.eat('food')\.cleanup('dishes')actor_1_fb_likes.fillna(0).astype(int).head()在整个DataFrame上操作数据分析1.查看数据选择数据子集[]directlyafteraSeriesorDataFrameThe.ilocindexerselectsonlybyintegerlocationandworkssimilarlytoPythonlists.The.locindexerselectsonlybyindexlabel,whichissimilartohowPythondictionarieswork.行、列、均可以布尔索引布尔索引也叫布尔选择,通过提供bool值来选择行,ThesebooleanvaluesareusuallystoredinaSeries,不同条件可以进行与或非,&,|,~,但请注意,python中,位运算符的优先级高于比较运算符,所以需要加括号movie.get_dtype_counts()#outputthenumberofcolumnswitheachspecificdatatype:movie.select_dtypes(include=['int']).head()#selectonlyintegercolumnsmovie.filter(like='facebook').head()#like参数表示包含此字符串movie.filter(regex='\d').head()#movie.filter支持正则表达式movie.filter(items=['actor_1_name','asdf'])#whichtakesalistofexactcolumnnames.movie.shapemovie.count()movie.min()#各列的最小值movie.isnull().any().any()#判断整个DataFrame有没有缺失值,方法是连着使用两个any(college_ugds_.head()+.00501)//.01#列名参与代数运算,等价于其中每一个元素参与此运算#统计缺失值最主要方法是使用isnull方法:college_ugds_.isnull().sum()college_ugds_cumsum.sort_values('UGDS_HISP',ascending=False)#按照某一列排序college_ugds_.dropna(how='all')#如果所有列都是缺失值,则将其去除college=pd.read_csv('data/college.csv')college.head()college.shapedisplay(college.describe(include=[np.number]).T)#统计数值列,并进行转置,很推荐!!!college.iloc[:,[4,6]].head()#选取两列的所有的行college.loc[:,['WOMENONLY','SATVRMID']]college.iloc[[60,99,3]].index.tolist()#.index.tolist()可以直接提取索引标签,生成一个列表college.iloc[5,-4]#整数索引college.loc['TheUniversityofAlabama','PCTFLOAN']#标签索引college[10:20:2]#逐行读取。city=college['CITY']city[10:20:2]#Series也可以进行同样的切片条件复杂时,采用dataframe的query方法对DataFrame的行做mask,使得所有满足条件的数据都消失对不满足条件的值进行替换,使用pandas的where语句split-apply-combinecommondataanalysispatternofbreakingupdataintoindependentmanageablechunks,independentlyapplyingfunctionstothesechunks,andthencombiningtheresultsbacktogether.criteria1=movie.imdb_score8criteria2=movie.content_rating=='PG-13'criteria3=(movie.title_year2000)|(movie.title_year=2010)#括号不能少。final=criteria1&criteria2&criteria3college[final]#作为索引,直接选择值为True的行。employee.BASE_SALARY.between(80000,120000)#用between来选择#排除最常出现的5家单位criteria=~employee.DEPARTMENT.isin(top_5_depts)employee[criteria].head()df.query('AB')#qeuivalentto`df[df.Adf.B]`#读取employee数据,确定选取的部门和列employee=pd.read_csv('data/employee.csv')depts=['HoustonPoliceDepartment-HPD','HoustonFireDepartment(HFD)']select_columns=['UNIQUE_ID','DEPARTMENT','GENDER','BASE_SALARY']qs=DEPARTMENTin@deptsandGENDER=='Female'and80000=BASE_SALARY=120000emp_filtered=employee.query(qs)emp_filtered[select_columns].head()criteria=c1|c2movie.mask(criteria).head()s=pd.Series(range(5)s.where(s0)s.where(s1,10) 上述思路对于到pandas中就是groupbyfilter()用来筛选数据,transform()产生新的数据ifwewanttogetasinglevalueforeachgroup-useaggregate()ifwewanttogetasubsetoftheinputrows-usefilter()ifwewanttogetanewvalueforeachinputrow-usetransform()对某一列实施复杂操作,用apply()函数数据清理#按照AIRLINE分组,使用agg方法,传入要聚合的列和聚合函数flights.groupby('AIRLINE').agg({'ARR_DELAY':'mean'}).head()#或者要选取的列使用索引,聚合函数作为字符串传入aggflights.groupby('AIRLINE')['ARR_DELAY'].agg('mean').head()flights.groupby('AIRLINE')['ARR_DELAY'].mean().head()#分组可以是多组,选取可以是多组,聚合函数也可以是多个,此时一一对应flights.groupby(['AIRLINE','WEEKDAY'])['CANCELLED','DIVERTED'].agg(['sum','mean']).head(7)#可以对同一列施加不同的函数group_cols=['ORG_AIR','DEST_AIR']agg_dict={'CANCELLED':['sum','mean','size'], 'AIR_TIME':['mean','var']}flights.groupby(group_cols).agg(agg_dict).head()#下面这个例子中,max_deviation是自定义的函数defmax_deviation(s): std_score=(s-s.mean())/s.std() returnstd_score.abs().max() college.group
本文标题:pandas常用操作
链接地址:https://www.777doc.com/doc-4015955 .html