《利用python进行数据分析》学习笔记(一)
2020-03-19 本文已影响0人
木凡_b812
准备工作:使用的为vscode 的jupyter notebook插件,python版本为3.8.2,学习用书为《利用python进行数据分析》(第二版)
pandas 基础操作
##pandas 入门
import pandas as pd
##两种数据结构 Series (一维)以及 Datarame (多维)
##构建Series
obj = pd.Series([1,2,3,4],index=['a','b','c','d'])
##通过字典构建
obj2 = pd.Series({'Tom':1000,"Jerry":2000})
##可以传入列表当作索引
list = ['a','c','d','e']
obj3 = pd.Series([1,2,3,4],index=list)
##series的基本操作
obj.values
obj.index
obj.name = "num" #对值归类
obj.index.name = "str" #对index归类
##与列表类似的选取数值
obj["a"]
obj[['a','b','d']]
##根据布尔数值选值
obj[obj>2]
##对Series整体操作,索引不变
obj*2
##判断索引是否存在,返回布尔数值
"a" in obj
##修改数值以及索引
obj["a"] = 9
obj.index = ["e",'f','g','h']
如和构建DataFrame以及添加行或者列
import pandas as pd
##通过字典构建
data = {'name':['Tom',"Jerry"],'age':[20,19],'year':[2000,2001]}
frame = pd.DataFrame(data)
##通过嵌套字典构建
frame2 = pd.DataFrame({'name':{0:'Tom',1:'Jerry'},'age':{0:20,1:19},'year':{0:2000,1:2001}})
##通过Seris构建
frame3 = pd.DataFrame({'name':frame2['name'],'age':frame2['age']})
##对列进行操作
##改变列的顺序
frame = pd.DataFrame(data,columns=['name','year','age'])
##获取列名
frame.columns
##获取一列
frame['age']
frame.age
##添加新的一列
frame['country'] = 'America'
frame['height'] = [1.2,0.5]
weight = pd.Series([50,20],index=[0,3])
frame['weight'] = weight ##并不会显示索引为3的行,第1行中weight为缺失值
frame['male'] = (frame['name'] == 'Tom')
##删除一列
del frame['country']
索引操作
import pandas as pd
import numpy as np
frame = pd.DataFrame({'state':['Ohio','Ohio','Nevada','Nevada'],'year':[2001,2002,2001,2002],'population':[1.5,1.6,1.7,1.8]})
##索引的基本操作
obj =pd.Series(np.arange(3),index=['a','b','c'])
obj
## index对象不可变
index = obj.index
##创建索引对象
lables = pd.Index(np.arange(3))
lables
##索引的共享
obj2 = pd.Series([1.5,0.7,-1.2],index=lables)
##索引可以重复
##series重新索引
obj3 = pd.Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])
obj3 = obj3.reindex(['a','b','c','d']) ##如果出现没有的索引,值会用NaN
##DataFrame重新索引
frame = pd.DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['Xian','Beijing','Shanghai'])
frame.reindex(['a','b','c','d']) #行重新索引
frame.reindex(columns = ['Guangzhou','Hangzhou','Tianjing'])#列重新索引 出现未出现的索引值全用NaN代替
对轴上的指定值操作
import pandas as pd
import numpy as np
#Seriess上丢弃指定值
obj = pd.Series(np.arange(5.0),index=['a','b','c','d','e'])
new_obj = obj.drop('c')
new_obj = obj.drop(['a','b'])
#DataFrames上丢弃指定值
data = pd.DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
data
data.drop('two',axis=1) ##传递axis = 1或者axis = 'columns‘ 可以删除一列
索引,选取以及过滤
import pandas as pd
import numpy as np
obj = pd.Series(np.arange(4.),index=['a','b','c','d'])
#Series 选取值分为两类
#根据行数或者列数选取值,或者index为从0开始的连续整数
obj[2:3] #左开 右闭
#根据索引
obj['a':'d'] #左开 右开
##一般选择一种选取数值的方式会比较好,以免弄乱
#DataFrame 选取数值
data = pd.DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
data[:'Utah'] #前3行
data[:3] #前3行
#根据布尔值的一些操作
#选取其中第三列大于5的值
data[data['three']>5]
#根据loc(轴标签)以及iloc(整数索引)
#loc选取数值
data.loc["Utah",'three'] #先行再列 ‘Utah'的’three'列
data.loc[['Ohio','Colorado'],'three'] #选取‘Ohio','colorado'的’three'列
#iloc选取数值
data.iloc[[2,1],[3,0,1]] #选取第3行的 4,1,2列
#loc以及iloc都是根据选取数值的方式,不过他们都可以选取 行与列 loc根据索引,iloc根据行于列数
算数运算与数据对齐
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a','b','c','d'])
df2 = pd.DataFrame(np.arange(20).reshape((4,5)),columns=['a','b','c','d','e'])
df1.add(df2,fill_value=0) #两个DataFrame运算,相同index的相加,不同index的为Nan
#DataFrame 与 Series运算
arr = df1.iloc[0,:]
arr
df1 - arr #广播,每一行都减
函数的应用以及映射
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.arange(12.).reshape(4,3),columns=['a','b','c'],index=['Xian','Beijing','Shanghai','Guangzhou'])
f = lambda x:x.max() - x.min()
frame.apply(f,axis=0) #每一列的最大值 减去 最小值
frame.apply(f,axis=1) #每一行的最大值 减去 最小值
def f(x):
return pd.Series([x.min(),x.max()],index=['min','max'])
frame.apply(f) # 返回每一列的最大值与最小值 并组成DataFrame
排序与排名
import pandas as pd
import numpy as np
obj = pd.Series(range(4),index=['d','a','b','c'])
#默认升序,降序加上ascending=False
obj.sort_index() #此方法可以根据index进行排序 如果为DataFrame 可以加方向axis=1或者axis=0
obj.sort_values() # values
obj.rank() #此方法返回出值的排名
对含有重复索引以及重复值进行操作
import pandas as pd
import numpy as np
obj = pd.Series(np.arange(5),index=['a','a','b','b','c'])
obj
obj.index.is_unique #可以告诉你标签是否唯一 ,返回布尔值
obj.value_counts() #计算值出现的频率
obj.unique() # 返回值的唯一值
obj.isin([0,1]) #是否含有某个数值