《利用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]) #是否含有某个数值
上一篇下一篇

猜你喜欢

热点阅读