当前位置: 首页 > 后端技术 > Python

Pandas常用操作

时间:2023-03-25 23:47:40 Python

Pandas常用操作1.列操作1.列名大写pd_target.columns=[x.upper()forxinlist(pd_target)]2.列内容大小写转换:df2["city"]=df2["city"].str.lower()#转换为全部小写df2["city"]=df2["city"].str.upper()#转换为全部大写df2["city"]=df2["city"].str.title()#转换为首字母大写3.列合并pd_base=df['column1'].str.cat(df['column2'])4.列名修改pd_base.rename(columns={'a':'A'},inplace=True)#修改列名a为A5。列类型转换pd_base['one']=pd.DataFrame(df['one'],dtype=np.float,inplace=True)#写一个pd_base['列名']=pd_base['列名'].astype(float)#写二二。Index1.重置索引pd_base.reset_index(drop=True,inplace=True)#dropdeleteoldindex,inplace替换旧的DataFrame2.保存数据并移除索引pd_base.to_csv('1.csv',index=无)3.数据CRUD1。获取单个值df._get_value(indexnumber,'columnname')#索引号默认从0开始0,1.2.3.4...2。locpd_base.loc['index']默认根据索引查找:pd_base.loc['index'],返回Seriesofindexrows(defaultindexisnumber0123456789)pd_base.loc[:,'columnname']只能有一个column,返回的是Seriespd_base.loc[:,['columnname1','columnname2']]返回一个DataFrame,list里面可以写多个columnnames3.ilocpd_base.iloc[int_x,int_y]#获取坐标(x,y)的值,从(0,0)开始pd_base.iloc[0:int_x,:]#选择前几行4.TraversalTraversebyrow:forrowinpd_base.itertuples():print(getattr(row,'列名1'),getattr(row,'列名2'))#输出每一行#对于每一行,通过columnnameforrowindf访问对应的元素.iterrows():print(row['c1'],row['c2'])#输出每一行逐列遍历forindex,rowindf.iteritems():print(index)#输出列名print(row)#以Series的形式输出一列排序排序pd.sort_values("columnname",inplace=True,ascending=False)inplace=True表示直接替换pd,不重新赋值SortbyRank,按SN组排序TestTimepd_mongo_base['Retest']=pd_mongo_base['TestTime'].groupby(pd_mongo_base['SN']).rank(ascending=1,method='first')有值ifpd_base.empty:#如果Dataframe值为根据条件过滤修改pd_base.loc[(pd_base['过滤A列']==0&(pd_base_csv['过滤B列']!='0')),['目标C列','目标列D']]='NULL'6。按条件检查pd_result=pd_base[(pd_base['stripes']>=1)|(pd_base['bars']>=1)]#多条件注意括号和多条件或者filter|而过滤不等于使用&!=################的另一种写法pd_group=pd_base.loc[np.where(pd_base['ERROR_CODE']==error)]7。GroupBypd_grouped=pd_result.groupby(['列名1','列名2'])分组后可以应用聚合函数:min()max()sum()mean()std()size()count()nunique()first()`last()`其中大小()会计算Nan的值,count()不会计算NaN,nunique()是去掉重复值后统计first()`last()`是分组后取出每组的第一行或最后一行pd_result=pd_grouped。groupby(['列名1','列名2'].size()聚合分组列:pd_result=df[['列名1','列名2']].groupby(df['key1'].min()pd_result=pd.DataFrame(pd_result,columns=['MIN'])#将Series结果转换成DataFramepd_result.reset_index(inplace=True)#先清理得到的DataFrame格式句子代码的语法糖:pd_result=df.groupby('key1')[['列名1','列名2']].min()pd_grouped['数据列1'].agg(np.mean)计算'data的平均值column1'forthegroupedDataFrame8.更改列名修改df.rename(columns={'a':'A'},inplace=True)#修改列名a为A9.删除删除包含某某行numberrow_list=pd_base[pd_base['one']==2].index.tolist()#获取包含该值的行的行号pd_result=pd_base.drop(row_list)删除包含nan的列pd_base_result=pd_base[~pd.isnull(pd_base['targetcolumn'])]#其中~表示反转结果,就是不把数据集pd_base中['targetcolumn']中带nan的行#肯定要赋值给一个新的DataFrame,虽然作者不明白为什么无效删除列pd_base.drop(labels=['targetcolumn'],axis=0,index=None,columns=None,inplace=False)#labels是要删除的行和列的名称,以列表的形式给出;#要删除列,指定axis=1;默认为0表示删除该行;#inplace=True,删除操作将直接对原始数据进行,删除后无法返回。#--------------------------------------#另一种删除方式是指定位置#index直接指定要删除的行eg:index=[0,1]#columns要删除的列eg:columns=[0,1]四、数据合并1.横向合并和直接合并pd_result=pd.concat(list_mongo_lefts,axis=1)按索引合并pd_result=pd_left.join(pd_right)按条件合并result=pd.merge(pd_left,pd_right,how='left',on=['key1','key2'])#左连接2.垂直合并pd_result=pd.concat(list_mongo_lefts,ignore_index=True)其中list_mongo_lefts存放的是要合并的pandas,ignore_index=True表示忽略索引合并table它来自,可以添加参数keys3.Columnmergepd_base=df['column1'].str.cat(df['column2'])5.类型转换1.pd到二维listlist_result=pd.values.tolist()#二维列表topda=[['a','1.2','4.2'],['b','70','0.03'],['x','5','0']]df=pd.DataFrame(a,columns=['one','two','three'])要列出的系列:s.tolist()2.Series?DataFramepd_base=pd.DataFrame(series,columns=['columnname'])pd_base=series.to_frame()3。np.array?DataFramep_base=pd_base.valuespd_base=pd.DataFrame(np_base)4。列类型转换pd_base['列名']=pd_base['列名'].astype(float)#通用类型转换pd_base['列名']=pd_base['列名'].map(ast.literal_eval)#将存储在str类型中的列转换为列表类型5.pdtodictionarylist_dict=base_data.to_dict(orient='records')#将每一行数据转换成字典,更直观6.生成CSVpd_base.to_csv('Generatefile.csv',index=None,encoding='utf_8_sig')#index=None表示生成的文件不包含索引6.数据清洗1.数据信息pd_base.size#数据个数pd_base.shape#数据形状pd_base.describe()#数据基本信息:数量、均值、中位数、标准差等pd_base.head()#前几行数据pd_base.ndim#列号pd_base.axes#横坐标和纵坐标标签名称2.inf值处理pd_base=pd_base.replace([np.inf,-np.inf],np.nan)#然后处理NAN3。删除NA值pd_base=pd_base.dropna()#axis=1,删除包含空值的列4.删除包含空值的行/列pd_base=pd_base.drop(how='any')#containemptyValuerow;axis=1,删除包含空值的列pd_base=pd_base.drop(['label'],axis=1)#删除一列或一行delete包含一定数的行row_list=pd_base[pd_base['one']==2].index.tolist()#获取包含该值的行的行号pd_result=pd_base.drop(row_list)5.填充NA值pd_base.fillna(df1.mean())#填充平均值pd_base.fillna(0)#填充06.删除包含nan值的列pd_base_result=pd_base[~pd.isnull(pd_base['targetcolumn'])]#其中~代表结果的倒置,即数据集pd_base中没有['targetcolumn']有nan#这一行必须赋值给一个新的DataFrame,虽然作者不明白为什么赋值给原来的DataFrame是无效的7.字符串形式的字典转字典的问题:字符串中的Key没有引号importdemjsonmsg="{name:'CP',id:'',pageno:1}"dic=demjson.decode(msg)8.列数据归一化pd_base[['目标列']].apply(lambdax:(x-np.min(x))/(np.max(x)-np.min(x)))7.计算1.统计列df_train.loc[:,'label'].value_counts()2中每个值出现的次数。在相邻行之间进行区分pd_result=pd_base.diff()8.Apply()defget_ch(data):aa=result=data['ItemList']result=data['ItemList']['Items'][0]['X'][0]返回int(结果)pd_sn_result['CH']=pd_sn_result.apply(get_ch,axis=1)