pandas的简单操作

# -*- 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))

 

你可能感兴趣的:(pandas的简单操作)