Pandas 数据处理,数据清洗详解
如下所示:
#-*-coding:utf-8-*- frompandasimportDataFrame importpandasaspd importnumpyasnp """ 获取行列数据 """ df=DataFrame(np.random.rand(4,5),columns=['A','B','C','D','E']) printdf print df['col_sum']=df.apply(lambdax:x.sum(),axis=1)#横向求和,axis=1表示横向 df.loc['row_sum']=df.apply(lambdax:x.sum())#loc获取一整列的数据,对一列数据进行求和 printdf print dd=pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc')) #loc获取一整列的数据 printdd print printdd.loc[0:len(dd),'a'] print printdd.loc[0:3,['a','b']] print printdd.loc[[1,5],['b','c']] print'--------------------------------------' #iloc获取某个位置的元素,或者某个区域的元素 printdd.iloc[1,1] printdd.iloc[0:3,[0,1]] printdd.iloc[[0,3,5],0:2] print'--------------------------------------' """ 去重函数drop_duplicates() """ frompandasimportSeries,DataFrame data=DataFrame({'k':[1,1,2,2]}) printdata printtype(data)#print isduplicates=data.duplicated()#duplicated()判断是否是重复的项 printisduplicates printtype(isduplicates)# print data=data.drop_duplicates()#drop_duplicates()移除重复的项 printdata printtype(data)# print'-------------------------------------------------' """ Pandas.DataFrame读取、合并、修改列数据、新增列、分组、分组数据计算 """ importnumpyasnp importpandasaspd frompandasimportSeries,DataFrame fromdatetimeimporttimedelta,datetime fromdateutil.parserimportparse """ 读写csv文件 """ #读取csv文件 df=pd.read_csv('data_english.csv',encoding='gbk') #printdf printtype(df)# printdf.columns#所有列的标签 printdf.index#所有行的标签 printdf.book_id#选择某一列,可以使用df.book_id,也可以使用df['book_id'] printtype(df.book_id)# printnp.array(df.book_id)#将Series转换为numpy的darray格式 print'---------------------------------------------------------' #写入csv文件 #df.to_csv('dat.csv',index=False,encoding='gbk')#index=False表示不把index写入文件 """ 行列的选取 """ printdf.read_name#选择一列 printdf[:3]#选择前3行 printdf.loc[:,('read_num','read_name')]#df.loc[行标签,列标签] printdf.iloc[2,4]#df.iloc[行位置,列位置] printdf.ix[2,4]#df.ix[行位置或行标签,列位置或列标签] #bool判断 printdf[df.read_name==u'山问萍'].head()#获取符合条件的行列 printdf[(df.read_name==u'山问萍')&(df.book==u'植物生理学实验教程')]#多个条件 print'----------------------------------------------' """ 两个df相merge """ #pd.concat([df1,df2])#两个df的column都一样,index不重复(增加列) #pd.concat([df1,df2],axis=1)#两个df的index都一样,column不重复(增加行) """ 增加列,删除列,重命名某一列 """ #df['new_col']=xxx#直接增加一列,加到最后一列 #df.insert[1,'new_col']#使用df.insert插入一列,可以设置这一列的位置 #deldf['one_col']#直接使用del进行删除,删除某一列 #df=df.rename(columns={'old_name':'new_name'})#重命名某一列 #df=df.rename(columns={'old_name':'new_name'},inplace=True) #print'--------------------------------------------------------' """ apply():对dataframe的内容进行批量处理,比循环更快 map(), agg():对分组的结果再分别进行不同的操作 """ """ 数据合并 """ importnumpyasnp importpandasaspd data1=pd.DataFrame({'level':['a','b','c','d'],'number':[1,3,5,7]}) data2=pd.DataFrame({'level':['a','b','c','e'],'number':[2,3,4,5]}) printdata1 printdata2 printpd.merge(data1,data2,on='level')#合并,内连接 data3=pd.DataFrame({'level1':['a','b','c','d'],'number':[1,3,5,7]}) data4=pd.DataFrame({'level2':['a','b','c','e'],'number':[2,3,4,5]}) printpd.merge(data3,data4,left_on='level1',right_on='level2') printpd.merge(data3,data4,left_on='level1',right_on='level2',how='left') print'----------------------------------------' """ merge参数说明: left和right:两个不同的DataFrame how:合并的方式-->inner内连接,right右连接,left左连接,outer外连接,默认为inner on:用于连接的列索引名称,必须存在于两个DataFrame对象中 left_on: right_on: left_index: right_index: sort:默认为True,将合并的数据进行排序 suffixes:当列名相同时,合并后,自动添加后缀名称,默认为(_x,_y) copy:默认为True,复制数据结构 indicator: """ """ 重叠数据合并 """ data3=pd.DataFrame({'level':['a','b','c','d'],'number1':[1,3,5,np.nan]}) data4=pd.DataFrame({'level':['a','b','c','e'],'number2':[2,np.nan,4,5]}) printdata3.combine_first(data4)#相同标签下的内容优先显示data3的内容,如果某个数据缺失,就用另外一个数据补上 """ 数据重塑和轴向旋转 数据重塑:reshape() 轴向旋转:unstack(),stack() """ data=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'],index=['wang','li','zhang']) printdata printdata.unstack()#轴向旋转 print'---------------------------------' """ 数据转换 """ data=pd.DataFrame({'a':[1,3,3,4],'b':[1,3,3,5]}) printdata printdata.duplicated()#判断是否重复行 printdata.drop_duplicates()#去除重复行 """ 替换值 """ data=pd.DataFrame({'a':[1,3,3,4],'b':[1,3,3,5]}) printdata.replace(1,2)#凡是数据1,全部替换成数据2 printdata.replace([1,4],np.nan)#凡是数据1,4,全部替换成np.nan """ 数据分段 """ data=[11,15,18,20,25,26,27,24] bins=[15,20,25] printdata printpd.cut(data,bins)
以上这篇Pandas数据处理,数据清洗详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。