# -*- coding: utf-8 -*- """ Created on Fri Apr 3 14:36:20 2020 @author: Admin """ #使用python进行数据清洗 import pandas as pd dates=pd.date_range('20130101',periods=6) df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) df.index=pd.date_range('20130101',periods=df.shape[0]) df.index=pd.date_range('20130101',periods=len(df)) #还可以指定一列为索引 df = df.set_index('A', drop = True) #修改索引和列,但是不改变df的值 df.rename(index=lambda x:x+5,columns={'A':'newA','B':'newB'}) #1.查看头尾数据 df.head() #头部 df.tail() #尾部 #2.显示索引、列、数据 df.index df.columns df.values #3.统计行数列数 df.shape #其中shape[0]是行数,shape[1]是列数 #4.查看数据框 (DataFrame) 的索引、数据类型及内存信息: df.info() #5.统计每一列非空个数 df.count() #6.统计某列有多少个类别 ,每个类别对应的个数用value_counts df.A.nunique() #输出个数 len(set(df.A)) #输出个数 df.A.unique() #输出类别 df['A'].value_counts() #类别和个数 df.describe() #描述性统计 #7.统计相关系数 df.corr() #8.按轴排序 df.sort_index(0) #按行名排序 df.sort_index(1) #按列名排序 df.sort_index(axis=1,ascending=False) #按照列名排序且是降序 #9.按值排序 df.sort_values(by='20130101',axis=1) #按照行的排序 df.sort_values(by='B') #按照某列排序 df.sort_values(['A','B'],ascending=False) #按照多列排序 #10.查看最大值索引 df.idxmax(0) #显示所有列最大值所对应的索引 df.A.idxmax(0) #显示A列中最大值对应的索引 #11.格式化输出format print('{:.2%}'.format(0.12354)) #百分比 print('{:,}'.format(123456789)) #会计千位分隔符 print('{:.2f}'.format(31.31412)) #保留2位小数 #12.切片 df['A'] #直接获取数据 或者这样子表达 df.A 包含着这列的值和索引 df[['A','B']] #选择多列 df[0:3] #获取行数据 df['20130101':'20130103'] #获取行数据 #12.1通过标签进行选择 .loc[] loc内部只能单独使用行标签选择行数据,选择某一列标签时前面需加: df.loc[dates[0]] #根据某行 df.loc[:,['A','B']] #根据某一列标签时前面需要加:号 df.loc['20130101',['A','B']] #根据某行某列 #12.2通过位置进行选择 .iloc[:,:] 通过传递数值进行位置选择(选择的是行), #特别是选择单行的时候(注意:iloc内部只有一个值得时候是选择的行,选择某一列时列号前面需加:,),另外-1代表最后一列 df.iloc[3] #选择第4行的数据 df.iloc[:,:-3] #选取除了最后三列之外的数据 df.iloc[1:3,1:3] #通过数值进行切片 位置加位置(区别于loc之处) 选择第2、3行,第2、3列数据 df.iloc[[1,2],[2,3]] #位置的列表 选择第2,3行,第3,4列数据 df.iloc[[0,1],:] #对行、列进行切片 第1、2行 df.iloc[:,[0,1]] #对行、列进行切片 第1、2列 df.iloc[1,1] #第2行第2列 #12.3布尔索引 不能说等于某个值,非要说,那就用isin df[df.A>0] df[df>0] #取出大于0的数,小于0的显示为空值 df['E']=['one','one','two','there','four','there'] df[df.E.isin(['two','four'])] #使用 isin()方法来过滤: #13.赋值 如果赋值的标签不存在,则产生新的列(行),未赋值的位置用空值填充 df.loc['20130101','A']=1 #14.缺失值的处理 df.isnull().sum() #查看每一列有多少个缺失值 #13.1删除列的方法,会改变原来的数据 df.drop(df.columns[4],axis=1,inplace=True) #不知道列名时 df.drop('E',axis=1,inplace=True) #根据列名删除 ,删除多列用这个drop(['A','B'],axis=1,inplace=True) del df['E'] #这个同理 #13.2去掉包含缺失值的行,不改变原来的值 df.dropna() #不返回df还是原值 df.dropna(how='all') #删除所有均为空值的行 df.dropna(inplace=True) #返回删除后的 df.dropna(axis=1) #移除数据框 DataFrame 中包含空值的列 #13.3 对缺失值进行填充(如果填充后需要保存,需加inplace=True) df.fillna(value=5) df.fillna(df.mean()) #将所有空值替换为平均值 pd.isnull(df) #14.相关操作 #14.1统计行列平均值0是列,1是行 df.mean() #列平均 round(df.mean()) df.mean(1) #行平均 #14.2Apply – 对数据应用函数 df.apply(lambda x:x.max()-x.min()) df.apply(np.mean) #按行统计axis=1 df.apply(np.max,axis=1) #按行统计axis=1 #14.3计数 value_counts() ,df不能直接使用 ,要加上某一列才可以使用 df.A.value_counts() #DataFrame查看某一列类别数据各类的个数 df.apply(pd.Series.value_counts) #DataFrame查看所有列的各类统计个数 #14.4 字符串大小写转换 str.lower() #14.5格式转换 astype(float) #14.6替换 df.replace(4,'one') #15.合并 #concat (不通过键值之间的连接) #merge 类似于 SQL 类型的连接( join)☆ #Append ---- 类似于 SQL 中 union #15.1concat (默认上下连接,axis=1时左右连接) df=pd.DataFrame(np.random.randn(10,4))