美文网首页
《利用python进行数据分析》学习笔记(一)

《利用python进行数据分析》学习笔记(一)

作者: 木凡_b812 | 来源:发表于2020-03-19 18:03 被阅读0次

    准备工作:使用的为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]) #是否含有某个数值
    

    相关文章

      网友评论

          本文标题:《利用python进行数据分析》学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/ucbhyhtx.html