Pandas和Numpy操作总结

一、 Pandas数据框基本操作总结

1、对数据框的基本操作

import pandas as pd

读取数据集

pd.read_clipboard()
pd.read_csv()
pd.read_excel()

改变索引列名称

df=pd.DataFrame(data,index=['A','B','C']) # 将索引列名称依次改为A、B、C

增删列

df['new_col']=df['x']*2
del df['new_col']

缺失值处理

df.isnull().sum() #返回每列缺失值个数,可控制sum的axis参数,notnull()就是判断是否为非空值,与isnull一样返回布尔值
df.dropna() #直接删除有缺失值的行

排序

df.sort_values(by='x') #按x列值排序

#按索引排序
import pandas as pd
import numpy as np
a=pd.DataFrame(np.arange(20).reshape(4,5),index=['z','w','y','x'])
print(a)
a.sort_index()

#没有指明列名时的排序
a=pd.DataFrame(np.random.rand(4,5))
print(a) #查看原始数据
a.sort_values(1)

数据框基本信息查看

df.info();df.head();df.tail();df.columns();df.index();
df.shape(); #显示行列数,df.shape[0]表示行数,df.shape[1]表示列数
df.values #将数据框转化为数组

选取数据

df[['x','y']] #选取x、y两列
df.iloc[:,:3] #取前3列所有行数据
df.loc[3] #取行
#条件选取:
df[df['x']>100]
df[(df['x']>100)&(df['y']<10)] #多条件

数据框的合并

pd.concat([df1.'x',df2.'y'],axis=0)
#axis=0表示按行合并,即行数增加,按列合并是列数增加

行列互换

扫描二维码关注公众号,回复: 11375424 查看本文章
df.T #数据框的转置

ps:
df.apply()括号中输入函数可对数据框进行批量操作,但要注意维度,如df.loc[‘row_sum’]=df.apply(lambda x:x.sum())这个命令,当df为series时会报’int’ object has no attribute 'sum’的错误,改为数据框格式后即可正常运行。推测其原因是apply用于series时,x是指每个元素,每个元素都是一个单独的整数,不能用sum方法,但apply用于dataframe时,x是每一列(axis=0时),因此可以行向求和

2、数据探索性分析

describe

df.describe() #得到计数、均值、总和和最值等
df.[['x1','x2','y']].describe()

对定性数据

#计算频数
T1=df.性别.value_counts()
#计算频率
T1/sum(T1)*100

对定量数据

df.mean();df.median();df.max();df.min();df.var();df.std();df.quantile(0.25);
df.quantile(0.75);df.skew();df.kurt() #skew、kurt分别为偏度、峰度

3、基于pandas绘图

基本绘图命令

DataFrame.plot(kind='line')
#其中参数kind还可以选择bar、barh(水平条图)、hist、box、kde、area、pie、scatter等来改变图类型

多图

df[['身高','体重']].plot(kind='box',subplot=True,layout=(1,2)) 
#表示身高、体重各绘制一个箱线图,按一行两列排序

对于定性数据

T1=df.['性别'].value_counts()
pd.DataFrame({‘频数’:T1,'频率':T1/sum(T1)*100})
T1.plot(kind='bar')
T1.plot(kind='pie')

结合概括性度量计算和绘图,自定义用于探索性分析的函数

# 1. 基本统计量计算函数
def stats(x):
	stat=[x.count(),x.min(),x.quantile(0.25),x.mean(),x.median(),x.quantile(0.75),
	x.max(),x.max()-x.min(),x.var(),x.std,x.skew(),x.kurt()]
	stat=pd.Series(stat,index=['Count','Min','Q1(25%)','Mean','Median','Q3(75%)','Max','Range','Var','Sdt','Skew','Kurt'])
	x.plot(kind='kde') #拟合核密度曲线
	return(stat)
stats(df.身高)

在这里插入图片描述

# 2. 定性数据计数汇总函数
def tab(x, plot=False): #计数频数表
        f=x.value_counts();f
        s=sum(f);
        p=round(f/s*100, 3); p 
        T1=pd.concat([f,p], axis=1); 
        T1.columns=['例数','构成比'];
        T2=pd.DataFrame({'例数':s,'构成比':100.00}, index=['合计'])
        Tab=T1.append(T2) 
        if plot: 
            fig,ax = plt.subplots(1,2,figsize=(15,6)) 
            ax[0].bar(f.index, f); #条图 
            ax[1].pie(p, labels=p.index, autopct='%1.2f%%');#饼图
        return(round(Tab, 3))
tab(df.开设,True)

在这里插入图片描述

# 3. 计量频率分析函数
import numpy as np
def freq(X,bins=10): #计量频数表与直方图
    H=plt.hist(X,bins);
    a=H[1][:-1];a 
    b=H[1][1:];b 
    f=H[0];f 
    p=f/sum(f)*100;p 
    cp=np.cumsum(p);cp 
    Freq=pd.DataFrame([a,b,f,p,cp]) 
    Freq.index=['[下限','上限)','频数','频率(%)','累计频数(%)'] 
    return(round(Freq.T,2)) 
freq(df.体重)

在这里插入图片描述

4、列联表、分组统计与数据透视表

二位列联表

pd.crosstab(df.性别,df.课程)
#参数设置中margins=True表示加上边际
#参数设置中normalize='index'/'columns'/'all'分别代表按行/列/总值算各个单元格所占比例

#画图
T2=pd.crosstab(df.性别,df.课程)
T2.plot(kind='bar')

分组统计

#按性别分组,计算不同性别的身高均值
df.groupby(['性别'])['身高'].mean()

#两种分组条件
df.groupby(['性别','课程'])['身高'].mean()

#多种分组条件计算多个度量值
df.groupby(['性别','课程'])['身高'].agg([np.mean,np.std])

数据透视表

#计数数据透视分析
df.pivot_table(values=['学号'], index=['性别','开设'], aggfunc=len) 

在这里插入图片描述

#计量数据透视分析
d'f.pivot_table(index=['性别'], values=["身高"], aggfunc=[np.mean,np.std]) 

在这里插入图片描述

#复合数据透视分析
df.pivot_table(['身高','体重'],['性别',"开设"],aggfunc=[len,np.mean,np.std] ) 

在这里插入图片描述

二、 numpy库基本操作总结

1、基本操作

构建等差数列

from numpy import *
linspace(1,100,50)

可视化函数曲线

from matplotlib.pyplot import *
x=linspace(1,100,50)
y=log(x) #exp(x),sin(x),cos(x)等
plot(x,y)

一维数组操作

import numpy as np
np.array([1,2,3,4,5]) #一维数组
np.nan() #生成缺失值
np.arange(9) #数组序列,默认从0开始,步长为1
np.arange(1,9,0.5) #等差数列
np.linspace(1,9,5) #等距数列,分成5等分

二维数组操作

a=np.array([[1,2],[3,4],[5,6]]) #生成二维数组
A=np.arange(9).reshape((3,3)) #生成3x3矩阵

其他

np.empty([3,3]) #空矩阵
np.zeros((3,3)) #零矩阵
np.ones((3,3)) 
np.eye(3) #生成3行3列单位矩阵

以上是基于《python数据分析基础教程 王斌会》整理的学习笔记

猜你喜欢

转载自blog.csdn.net/hcjdgskg/article/details/106957086
今日推荐