Python数据分析基础教程/王斌会
第三章 Python编程分析基础
- 3.1Python的数据类型
- 3.2数值分析库numpy
3.2.1一维数组
其他有帮助的生成数:
np.random.randint(1,9) #1~9随机数
np.random.rand(10) #10个均匀随机数
np.random.randn(10) #10个正态随机数
3.2.2二维数组
3.2.3其他数组
一点点补充
np.empty([3,3]) #空数组
np.zeros((3,3)) #零矩阵
np.ones((3,3)) #1矩阵
np.eye(3) #单位阵
- 3.3数据分析库pandas
3.3.1序列Series*****
说明:
#(3)序列合并
pd.concat([S2,S3],axis=0) #按行并序列
pd.concat([S2,S3],axis=1) #按列并序列
3.3.2数据框DateFrame*****
###3.3.2 数据框:DataFrame
#(1)生成数据框
pd.DataFrame() #生成空数据框
#(2)根据列表创建数据框
pd.DataFrame(X)
pd.DataFrame(X,columns=['X'],index=range(5))
pd.DataFrame(weight,columns=['weight'],index=['A','B','C','D','E'])
#(3)根据字典创建数据框
'''通过字典列表生成数据框是Python较快捷的方式 '''
df1=pd.DataFrame({'S1':S1,'S2':S2,'S3':S3});df1
df2=pd.DataFrame({'sex':sex,'weight':weight},index=X);df2
#(4)增加数据框列
df2['weight2']=df2.weight**2; df2 # 生成新列
#(5)删除数据框列
del df2['weight2']; df2 #删除数据列
#(5)缺失值处理
df3=pd.DataFrame({'S2':S2,'S3':S3},index=S1);df3
df3.isnull()#是缺失值返回True,否则范围False
df3.isnull().sum()#返回每列包含的缺失值的个数
df3.dropna() #直接删除含有缺失值的行,多变量谨慎使用
#df3.dropna(how = 'all')#只删除全是缺失值的行
#(7)数据框排序
df3.sort_index() #按index排序
df3.sort_values(by='S3') #按列值排序
总结:pd.DataFrame()中的参数
3.3.3数据的读写
总结:pd.read_excel()中的参数
Basic Python Knowledge You Need To Know:导入Excel之pd.read_excel参数小结
3.3.4数据的保存
3.3.5对数据框的操作
补充与汇总:
####3.3.4.1 基本信息
#(1)数据框显示
BSdata.info() #数据框信息
BSdata.head() #显示前5行
BSdata.tail() #显示后5行
#(2)数据框列名(变量名)
BSdata.columns #查看列名称
#(3)数据框行名(样品名)
BSdata.index #数据框行名
#(4)数据框维度
BSdata.shape #显示数据框的行数和列数
BSdata.shape[0] #数据框行数
BSdata.shape[1] #数据框列数
#(5)数据框值(数组)
BSdata.values #数据框值数组
3.3.6选取变量
BSdata.身高 # 取一列数据,BSdata['身高']
BSdata[['身高','体重']] #取两列数据
BSdata.iloc[:,2] # 取1列
BSdata.iloc[:,2:4] # 取3 、4 列
BSdata.loc[3] #取1行
BSdata.loc[3:5] #取3-5行
BSdata.loc[:3,['身高','体重']]
BSdata.iloc[:3,:5] #0到2行和1:5列
BSdata[BSdata['身高']>180]
BSdata[(BSdata['身高']>180)&(BSdata['体重']<80)]
3.3.7数据框的运算
BSdata['体重指数']=BSdata['体重']/(BSdata['身高']/100)**2
round(BSdata[:5],2)
pd.concat([BSdata.身高, BSdata.体重],axis=0)
pd.concat([BSdata.身高, BSdata.体重],axis=1)
BSdata.iloc[:3,:5].T###转置*****
补充:round()函数的用法
附一个简单的例子
In [1]: round(1.5324)
Out[1]: 2.0
In [2]: round(1.5324, 2)
Out[2]: 1.53
- 3.4基础编程运算
- 附件:第三章代码汇总
#3 Python 编程分析基础
##3.1 Python 数据类型
###3.1.1Pyhton 对象
x=10.12 #创建对象x
del x #删除对象x
###3.1.2 数据基本类型
#数值型
n=10 #整数
n
print("n=",n)
x=10.234 #实数
print(x)
print("x=%10.5f"%x)
#逻辑型
a=True;a
b=False;b
10>3
10<3
#字符型
s='IlovePython';s
s[7]
s[2:6]
s+s
s*2
float('nan')
###3.1.3 标准数据类型
#(1)List(列表)
list1=[] # 空列表
list1
list1=['Python',786,2.23,'R',70.2]
list1 # 输出完整列表
list1[0] # 输出列表的第一个元素
list1[1:3] # 输出第二个至第三个元素
list1[2:] # 输出从第三个开始至列表末尾的所有元素
list1*2 # 输出列表两次
list1+list1[2:4] # 打印组合的列表
X=[1,3,6,4,9];X
sex=[' 女',' 男',' 男',' 女',' 男']
sex
weight=[67,66,83,68,70];
weight
#(2)Tuple(元组)
#(3)Dictionary(字典)
{} #空字典
dict1={'name':'john','code':6734,'dept':'sales'};dict1 #定义字典
dict1['code'] # 输出键为'code' 的值
dict1.keys() # 输出所有键
dict1.values() # 输出所有值
dict2={'sex': sex,'weight':weight}; dict2 #根据列表构成字典
##3.2 数值分析库numpy
###3.2.1 一维数组(向量)
import numpy as np #加载数组包
np.array([1,2,3,4,5]) #一维数组
np.array([1,2,3,np.nan,5]) #包含缺失值的数组
np.array(X) #列表变数组
np.arange(9) #数组序列
np.arange(1,9,0.5) #等差数列
np.linspace(1,9,5) #等距数列
np.random.randint(1,9) #1~9随机数
np.random.rand(10) #10个均匀随机数
np.random.randn(10) #10个正态随机数
###3.2.2 二维数组(矩阵)
np.array([[1,2],[3,4],[5,6]]) #二维数组
A=np.arange(9).reshape((3,3));A # 形成3x3
###3.2.3 数组的操作
A.shape
np.empty([3,3]) #空数组
np.zeros((3,3)) #零矩阵
np.ones((3,3)) #1矩阵
np.eye(3) #单位阵
##3.3 数据分析库pandas
import pandas as pd #加载数据分析包
###3.3.1 序列:Seriers
#(1)创建序列(向量、一维数组)
pd.Series() #生成空序列
#(2)根据列表构建序列
X=[1,3,6,4,9]
S1=pd.Series(X);S1
S2=pd.Series(weight);S2
S3=pd.Series(sex);S3
#(3)序列合并
pd.concat([S2,S3],axis=0) #按行并序列
pd.concat([S2,S3],axis=1) #按列并序列
#(4)序列切边
S1[2]
S3[1:4]
###3.3.2 数据框:DataFrame
#(1)生成数据框
pd.DataFrame() #生成空数据框
#(2)根据列表创建数据框
pd.DataFrame(X)
pd.DataFrame(X,columns=['X'],index=range(5))
pd.DataFrame(weight,columns=['weight'],index=['A','B','C','D','E'])
#(3)根据字典创建数据框
'''通过字典列表生成数据框是Python较快捷的方式 '''
df1=pd.DataFrame({'S1':S1,'S2':S2,'S3':S3});df1
df2=pd.DataFrame({'sex':sex,'weight':weight},index=X);df2
#(4)增加数据框列
df2['weight2']=df2.weight**2; df2 # 生成新列
#(5)删除数据框列
del df2['weight2']; df2 #删除数据列
#(6)缺失值处理
df3=pd.DataFrame({'S2':S2,'S3':S3},index=S1);df3
df3.isnull()#是缺失值返回True,否则范围False
df3.isnull().sum()#返回每列包含的缺失值的个数
df3.dropna() #直接删除含有缺失值的行,多变量谨慎使用
#df3.dropna(how = 'all')#只删除全是缺失值的行
#(7)数据框排序
df3.sort_index() #按index排序
df3.sort_values(by='S3') #按列值排序
###3.3.3 数据框的读写
####3.3.3.1pandas读取数据集
#(1)从剪切板上读取
#BSdata=pd.read_clipboard();
BSdata[:5] #从剪切板上复制数据
#(2)读取csv格式数据
#BSdata=pd.read_csv("BSdata.csv",encoding='utf-8') #注意中文格式
BSdata[6:9]
#(3)读取Excel格式数据
BSdata=pd.read_excel('DaPy_data.xlsx','BSdata');BSdata[-5:]
####3.3.3.2pandas数据集的保存
BSdata.to_csv('BSdata1.csv') #将数据框BSdata保存到BSdata.csv
###3.3.4 数据框的操作
####3.3.4.1 基本信息
#(1)数据框显示
BSdata.info() #数据框信息
BSdata.head() #显示前5行
BSdata.tail() #显示后5行
#(2)数据框列名(变量名)
BSdata.columns #查看列名称
#(3)数据框行名(样品名)
BSdata.index #数据框行名
#(4)数据框维度
BSdata.shape #显示数据框的行数和列数
BSdata.shape[0] #数据框行数
BSdata.shape[1] #数据框列数
#(5)数据框值(数组)
BSdata.values #数据框值数组
####3.3.4.2 选取变量
BSdata.身高 # 取一列数据,BSdata['身高']
BSdata[['身高','体重']] #取两列数据
BSdata.iloc[:,2] # 取1列
BSdata.iloc[:,2:4] # 取3 、4 列
####3.3.4.3 提取样品
BSdata.loc[3] #取1行
BSdata.loc[3:5] #取3-5行
####3.3.4.4 选取观测与变量
BSdata.loc[:3,['身高','体重']]
BSdata.iloc[:3,:5] #0到2行和1:5
####3.3.4.5 条件选取
BSdata[BSdata['身高']>180]
BSdata[(BSdata['身高']>180)&(BSdata['体重']<80)]
####3.3.4.6 数据框的运算
BSdata['体重指数']=BSdata['体重']/(BSdata['身高']/100)**2
round(BSdata[:5],2)
pd.concat([BSdata.身高, BSdata.体重],axis=0)
pd.concat([BSdata.身高, BSdata.体重],axis=1)
BSdata.iloc[:3,:5].T
#3.4 Python 编程运算
##3.4.1 基本运算
##3.4.2 控制语句
####3.4.2.1 循环语句for
for i in range(1,5):
print(i)
fruits = ['banana', 'apple', 'mango']
for fruit in fruits:
print('当前水果 :', fruit)
for var in BSdata.columns:
print(var)
####3.4.2.2 条件语句if/else
a = -100
if a < 100:
print("数值小于100")
else:
print("数值大于100")
-a if a<0 else a
##3.4.3 函数定义
x=[1,3,6,4,9,7,5,8,2];x
def xbar(x):
n=len(x)
xm=sum(x)/n
return(xm)
xbar(x)
np.mean(x)