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数据处理,数据清洗详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
