Python 数据分析Pandas入门

     Pandas是数据科学领域非常重要的工具,它主要可以做数据分析的处理,Pandas主要有两个主要的数据结构,一个是Series,一个是Dataframe.

一.Series创建:

   1.通过py list来创建series:

     s1 = pd.Series([1,2,3,4])

     Series中有两部分内容,第一个内容是数据value,第二个是索引index

   2.通过numpy.array来创建series:

      s2 = pd.Series(np.arange(10))

   3.通过字典来创建Series:

       s3 = pd.Series({'1':1,'2':2,'3':3}) 

  通常多采用第一种方式进行series的创建,创建时可以对index进行设置:

      s4 = pd.Series([1,2,3,4],index=['a','b','c','d'])

      Series类型可以像字典类似的来访问其中的元素;s4['A']

      也可以进行series和字典之间类型的互换:s4.to_dict()

      也可以人为的来更改index,例如:

                   index_1 = ['a','b','c','d','e']

                   s6 = pd.Series(s5,index = index_1)

      如果某一个index下没有数据时,会返回Nan;可以先通过pd.isnull(s6),来判断其中的index有没有空的;

二.Dataframe创建:

    先引入库: import numpy as np     import  pandas as pd      from pandas import  Series,DataFrame

    1.通过粘贴板来创建dataframe:

       df = pd.read_clipboard()

       查看dataframe的列:  df.columns  ;    获取特定某一列的value: df.Ratings  (ratings是列名)

      如果想要过滤,查看某几列的dataframe,则可以新建一个dataframe:

      df_new = DataFrame(df,columns=['Programming Language','Sep 2016'])

     对于有的columns是有空格的,那么可以使用key的方式来获取数据:

     df['Sep 2016']

    如果建了一个不存在的column,则新建的column的数据为Nan;

    给Dataframe赋值:

       df_new['Sep 2018'] = range(0,10)

       df_new['Sep 2018'] = pd.Series(np.arrange(0,10))

    修改某一列中的某几个值,通过series来指定index进而进行赋值: 

      df_new['Sep 2018'] = pd.Series([100,200],index=[1,2])

三.Series和Dataframe的深入操作:

     1.遍历dataframe的值:  

               for row in df.iterrows():

                    print(row[0][1])

    2.通过Series来创建DataFrame:

              df_new = DataFrame([s1,s2,s3]);

             设置index来创建DataFrame:

             df_new = DataFrame([s1,s2,s3], index=['Country','Capital', 'Population'])

    3.Dataframe的切片操作:

             dataframe数据选取列:  imdb[['color','director_name']]

             dataframe数据选取行iloc: 

                        #行全部选取,列选取0,1两列

                        imdb.iloc[:,0:2]

                       如果选取的不是连续的列,则可以:

                       imdb.iloc[:,[0,2,4]]

             dataframe数据选取行loc:

                        #loc取得的是label;而iloc取得的是index,即每一个元素往下走的索引

                       #loc得到过滤依然是选取的label值;

                       tmp_df.loc[15:17,:'director_name']

                       #选取行用的是真的索引,而不是index;选取列用的是key标;

     

   4.reindex操作更换索引:

          Series更换index:     

                创建带有index的Series:

                 s1 = Series([1,2,3,4], index=['A','B','C','D'])

                 s1.reindex(index=['A','B','C','D','E']) 

                如果是添加的index为空,需要填充数据,则:

                 s1.reindex(index=['A','B','C','D','E'], fill_value=10)

                如果是有选择的填充数据,则:

                # 对1-15进行填充数据,1到5之间按照A去赋值,5到10之间按照B去赋值;

                s2.reindex(index=range(15),method='ffill')

          Dataframe更换index:

                 # index指的是行标;column指的是列标
                # np.random.rand ->给出0到1之间得25个均匀分布得随机样本;
                # np.random.rand.reshape 将这些数字分成几行几列

               添加index(若原来的index中没有这个index,则按照nan进行添加):

              df1.reindex(index=['A','B','C','D','E','F'])

              添加columns(若原来的column中没有这个column,则按照nan进行添加):

              df1.reindex(columns=['c1','c2','c3','c4','c5','c6'])

             如果要直接更换,则可以:

              df1.rename(index={'B':'C'})

              注:reindex更像查找,如果原来的表中有这样的值,则可以显示,若没有,则按照nan的值形式进行

             添加;而rename则是把原来的名字换掉;

           Series和Dataframe的drop操作:

             直接按名字指定,但是为了防止行和列中名字出现相同的情况,故采用axis来进行选择是行还是列:

             df1.drop('c1',axis=1)

            注:axis为0时指的是行,为1时指的是列

四.NAN操作:

         Series中删除nan的值: s1.dropna()

         dataframe中删除nan的值:

         # axis为0时是指对行操作:
         # 1.不加how.只要有nan,则drop
         # 2.how为any操作,只要有none,则drop
         # 3.只有这行全部的数据都为nan,才会被删掉

         df1 = dframe.dropna(axis=0,how='all')

        删除的另一个参数:

        # thresh参数的含义:这一行(默认是行操作)中的nan大于2个,才drop

        df2 = dframe2.dropna(thresh=2)

        填充:

        # fillna的方法是对于是nan的值进行填充,填充的值为value
        # 以下的意思是:第0列的填充0,第一列的填充1,第二列的填充;2,以此类推

       dframe2.fillna(value={0:0,1:1,2:2,3:3})

               

五.多级index操作:                                

        Series可以看成是一维的结构,而Dataframe可能是由多个series组成,把dataframe看成是一个二维的结构,
         而多级的series就可以看成一个多维的结构,故其和dataframe是有一个转换的关系存在的; 
        #  方法一:多级的series通过unstack来转化为dataframe      
        df1 = s1.unstack()

        # 方法二:通过传统的方式进行转换

        df2 = DataFrame([s1['1'],s1['2']])

        # dataframe也可以转换成多级的series

        s2 = df1.unstack()

        # 构造多级index,多级column的dataframe

        df = DataFrame(np.arange(16).reshape(4,4), index=[['a','a','b','b'],[1,2,1,2]], columns=[['BJ','BJ','SH','GZ'],[8,9,8,8]])

六.Maping和Replace操作:

        为dataframe再增加一列:

         # 方法一:这一列是series;故选择添加一列series

         df1['GDP'] = Series([1000,2000,1500], index=['A','B','C'])

         # 方法二:通过map的方式添加,通过python的字典为其加上一个column

         gdp_map = {"北京":1000,"上海":2000,"广州":10}

         df1['GDP'] = df1['城市'].map(gdp_map)

         注:# 使用map方式添加时,不用关心前面的index的值是多少;而采用Series的方式添加时,需要关心顺序以及index;

         Series中的replace操作:

         #把serise的value replace成我们想要的数值

         s1.replace([1,2,3], [10,20,30])

猜你喜欢

转载自blog.csdn.net/qq_29027865/article/details/81627529