本期的话题是关于python中的数据分析工具pandas,总结了一些工作中常用的pandas技巧,方便更高效的实现数据分析。文章很短,不用收藏也能搞定~Pandas技巧总结1.计算变量缺失率df=pd.read_csv('titanic_train.csv')defmissing_cal(df):"""df:数据集返回:每个变量Missing_series=df.isnull().sum()/df.shape[0]missing_df=pd.DataFrame(missing_series).reset_index()missing_df=missing_df.rename(columns={'index':'col',0:'missing_pct'})missing_df=missing_df.sort_values('missing_pct',ascending=False).reset_index(drop=True)returnmissing_dfmissing_cal(df)如果需要计算样本的缺失率分布,只需添加参数axis=12.获取组中最大值行的方法分为两种:组中有重复值和不存在重复值。无重复值的情况。df=pd.DataFrame({'Sp':['a','b','c','d','e','f'],'Mt':['s1','s1','s2','s2','s2','s3'],'值':[1,2,3,4,5,6],'计数':[3,2,5,10,10,6]})dfdf.iloc[df.groupby(['Mt']).apply(lambdax:x['Count'].idxmax())]先按Mt列进行分组,然后对数据框进行分组使用idxmax函数提取Count最大值所在的列,然后使用iloc位置索引提取该行。在重复值的情况下df["rank"]=df.groupby("ID")["score"].rank(method="min",ascending=False).astype(np.int64)df[df["rank"]==1][["ID","class"]]将ID分组,然后将排名函数应用于分数。如果分数相同,则给出相同的排名,然后取出排名为1的数据。3.将多列合并为一行df=pd.DataFrame({'id_part':['a','b','c','d'],'pred':[0.1,0.2,0.3,0.4],'pred_class':['women','man','cat','dog'],'v_id':['d1','d2','d3','d1']})df.groupby(['v_id'].agg({'pred_class':[','.join],'pred':lambdax:list(x),'id_part':'first'}).reset_index()4.删除包含具体字符串所在行df=pd.DataFrame({'a':[1,2,3,4],'b':['s1','exp_s2','s3','exps4'],'c':[5,6,7,8],'d':[3,2,5,10]})df[df['b'].str.contains('exp')]5.在组内排序df=pd.DataFrame([['A',1],['A',3],['A',2],['B',5],['B',9]],columns=['name','score'])介绍了两种在组内高效排序的方法。df.sort_values(['name','score'],ascending=[True,False])df.groupby('name').apply(lambdax:x.sort_values('score',ascending=False)).重置索引(下降=真)6。选择特定类型的列drinks=pd.read_csv('data/drinks.csv')#选择所有数值型列drinks.select_dtypes(include=['number']).head()#选择所有字符型列drinks.select_dtypes(include=['object']).head()drinks.select_dtypes(include=['number','object','category','datetime']).head()#使用exclude关键字排除指定数据类型drinks.select_dtypes(exclude=['number']).head()7.将字符串转换为值df=pd.DataFrame({'column1':['1.1','2.2','3.3'],'column2':['4.4','5.5','6.6'],'column3':['7.7','8.8','-']})dfdf.astype({'column1':'float','column2':'float'}).dtypes转换第三个column这种方式会报错,因为这个column中包含一个代表0的下划线,pandas不能自动判断这个下划线。要解决此问题,请在第三列上使用to_numeric()函数来告诉pandas将任何无效输入转换为NaN。df=df.apply(pd.to_numeric,errors='coerce').fillna(0)8.优化DataFrame内存使用方式一:只读取实际需要的列,使用usecols参数cols=['beer_servings','continent']small_drinks=pd.read_csv('data/drinks.csv',usecols=cols)方法二:通过指定dtype参数,将包含分类数据的object列转换为Category数据类型。dtypes={'continent':'category'}smaller_drinks=pd.read_csv('data/drinks.csv',usecols=cols,dtype=dtypes)9.根据最大??类别过滤DataFramemovies=pd.read_csv('data/imdb_1000.csv')counts=movies.genre.value_counts()movies[movies.genre.isin(counts.nlargest(3).index)].head()10.将字符串拆分为多列df=pd.DataFrame({'姓名':['张三','李四','王舞'],'位置':['北京-东城区','上海-黄浦区','广州-白云区']})dfdf.Name.str.split('',expand=True)11.将Series中的列表转换为DataFramedf=pd.DataFrame({'column1':['a','b','c'],'第2列:[[10,20]、[20,30]、[30,40]]})dfdf_new=df.column2.apply(pd.Series)pd.concat([df,df_new],axis='columns')12.聚合具有多个函数的订单=pd.read_csv('data/chipotle.tsv',sep='\t')orders.groupby('order_id').item_price.agg(['sum','count']).head()13.分组聚合importpandasaspddf=pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})dfforname,groupindf.groupby('key1'):print(name)print(group)dict(list(df.groupby('key1')))密码用于对人进行分组的代码或系列=pd.DataFrame(np.random.randn(5,5),columns=['a','b','c','d','e'],index=['Joe','Steve','Wes','Jim','Travis'])mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'}by_column=people.groupby(mapping,axis=1)by_column.sum()以上就是本文的全部内容,满满的干货,大家注意及时消化
