python數據分析003_數據的合並篩選排序


一. 數據的合並

  1.數據合並主要包括下面兩種操作:

   軸向連接(concatenation):pd.concat()可以沿一個軸將多個DataFrame對象連接在一起,形成一個新的DataFrame對象。
   融合(merging):pd.merge()方法可以根據一個或多個鍵將不同DataFrame中的行連接起來。
  • pd.concat(objs, axis=0, join='outer')

 

    • objs: series、dataframe或者是panel構成的序列list。

 

  • axis: 需要合並鏈接的軸,0是行,1是列,默認是0。
  • join:連接的方式 inner,或者outer,默認是outer。

  2.concat:

    pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)  如果兩個表的index都沒有實際含義,使用ignore_index參數,置true,重新整理一個新的index。

  3.merge:

    merge(left, right, how='inner', on=None)

    • left和right:兩個要合並的DataFrame
    • how:連接方式,有inner、left、right、outer,默認為inner
    • on:指的是用於連接的列索引名稱,必須存在於左右兩個DataFrame中,如果沒有指定且其他參數也沒有指定,則以兩個DataFrame列名交集作為連接鍵
    • 例如: pd.merge(left,right,on=['key'],how='outer')

二.數據的篩選

  1.篩選某一列數據大於100, bools記錄了每一行是否符合篩選條件,是一個Series對象,其中的值是bool類型。   

  • df = pd.read_csv('/xx.csv')
  • bools= df['aa']>100
  • df1 = df[bools]

  2.多個條件並集篩選, 且& 或 | 

  • import pandas as pd
  • df = pd.read_csv('/data/course_data/data_analysis/mouhu_users_2017.csv')
  • bool1= df['關注者']>300
  • bool2= df['關注']>100
  • df2 = df[bool1 & bool2] 
  • df2.head()

 三.數據的排序

  1.使用sort_index()、sort_values()兩個方法對數據進行排序,並且這兩個方法Series和DataFrame都支持。

     DataFrame的sort_index( )方法是按照行索引進行排序,sort_values()可以指定具體列進行排序。
  2.read_excel()中的參數index_col='Country Code'作用是在讀取文件的時候指定Country Code這一列數據為行索引。

  inplace=True參數和我們之前見過的作用一樣,用來控制是否直接對原始數據進行修改。

  ascending可以控制排序的順序,默認值為True從小到大排列,當它被設置為False的時候就可以實現倒序排列。
  • import pandas as pd
  • df = pd.read_excel('/data/course_data/data_analysis/rate.xlsx',index_col='Country Code')
  • df.sort_index(inplace=True,ascending=True)
  • df.head()

3.sort_values():

 by:決定了是按數據中的哪一列進行排序,將需要按照某列排序的列名賦值給by即可。

ascending=False:將數據按照從大到小的順序排列。

    inplace=True:用來控制是否直接對原始數據進行修改。
  •  df.sort_values(by='關注者',ascending=False,inplace=True)

 四.總結

 五. 數據的分組

  1.按某一列分組

    groups = df.groupby('xx')

  2.用groupby的size方法可以查看分組后每組的數量,並返回一個含有分組大小的Series

    print(groups.size())

  3.查看分組group.groups的結果是一個字典,字典的key是分組后每個組的名字,對應的值是分組后的數據

  4.group.get_group('F')這個方法可以根據具體分組的名字獲取,每個組的數據。

  5.獲取'F'組的最大年紀,最小年紀以及平均年齡    

  • # 獲取F組的數據
  • f_group = groups.get_group('F')
  • # 獲取平均值
  • f_mean = f_group['age'].mean()
  • # 獲取最大值
  • f_max = f_group['age'].max()
  • # 獲取最小值
  • f_min = f_group['age'].min()

   6.

 

   7.根據多個列分組group=df.groupby(['country','gender'])

   8.group.size()返回的結果中發現索引值是多層的,獲取多層索引值:    

df1 = group.size()
size = df1['Austria']['F']

   9.分組后數據的統計    

  • groups = df.groupby('gender')
  • for group_name,group_df in groups:
  • f_se = group_df['age'].agg(['max','min','mean'])
  • print('{}組的最大年齡是{},最小年齡是{},平均年齡是{}'.format(group_name,f_se[0],f_se[1],f_se[2]))

   10.

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM