<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas必知必會的使用技巧,值得收藏!

          共 4112字,需瀏覽 9分鐘

           ·

          2020-12-15 10:57

          作者:風(fēng)控獵人


          本期的主題是關(guān)于python的一個數(shù)據(jù)分析工具pandas的,歸納整理了一些工作中常用到的pandas使用技巧,方便更高效地實現(xiàn)數(shù)據(jù)分析。文章很短,不用收藏就能Get~

          Pandas技巧總結(jié)

          1.計算變量缺失率

          df=pd.read_csv('titanic_train.csv')
          def missing_cal(df):
          """
          df :數(shù)據(jù)集

          return:每個變量的缺失率
          """
          missing_series = df.isnull().sum()/df.shape[0]
          missing_df = pd.DataFrame(missing_series).reset_index()
          missing_df = missing_df.rename(columns={'index':'col',
          0:'missing_pct'})
          missing_df = missing_df.sort_values('missing_pct',ascending=False).reset_index(drop=True)
          return missing_df
          missing_cal(df)


          如果需要計算樣本的缺失率分布,只要加上參數(shù)axis=1


          2.獲取分組里最大值所在的行方法

          分為分組中有重復(fù)值和無重復(fù)值兩種。無重復(fù)值的情況
          df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})
          df

          df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())]
          先按Mt列進行分組,然后對分組之后的數(shù)據(jù)框使用idxmax函數(shù)取出Count最大值所在的列,再用iloc位置索引將行取出。有重復(fù)值的情況
          df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64)
          df[df["rank"] == 1][["ID", "class"]]

          對ID進行分組之后再對分數(shù)應(yīng)用rank函數(shù),分數(shù)相同的情況會賦予相同的排名,然后取出排名為1的數(shù)據(jù)。


          3.多列合并為一行

          df = pd.DataFrame({'id_part':['a','b','c','d'], 'pred':[0.1,0.2,0.3,0.4], 'pred_class':['women','man','cat','dog'], 'v_id':['d1','d2','d3','d1']})

          df.groupby(['v_id']).agg({'pred_class': [', '.join],'pred': lambda x: list(x),
          'id_part': 'first'}).reset_index()


          4.刪除包含特定字符串所在的

          df = pd.DataFrame({'a':[1,2,3,4], 'b':['s1', 'exp_s2', 's3','exps4'], 'c':[5,6,7,8], 'd':[3,2,5,10]})
          df[df['b'].str.contains('exp')]

          5.組內(nèi)排序

          df = pd.DataFrame([['A',1],['A',3],['A',2],['B',5],['B',9]], columns = ['name','score'])
          介紹兩種高效地組內(nèi)排序的方法。
          df.sort_values(['name','score'], ascending = [True,False])
          df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False)).reset_index(drop=True)

          6.選擇特定類型的列

          drinks = pd.read_csv('data/drinks.csv')
          # 選擇所有數(shù)值型的列
          drinks.select_dtypes(include=['number']).head()
          # 選擇所有字符型的列
          drinks.select_dtypes(include=['object']).head()
          drinks.select_dtypes(include=['number','object','category','datetime']).head()
          # 用 exclude 關(guān)鍵字排除指定的數(shù)據(jù)類型
          drinks.select_dtypes(exclude=['number']).head()

          7.字符串轉(zhuǎn)換為數(shù)值

          df = pd.DataFrame({'列1':['1.1','2.2','3.3'],
          '列2':['4.4','5.5','6.6'],
          '列3':['7.7','8.8','-']})
          df
          df.astype({'列1':'float','列2':'float'}).dtypes
          用這種方式轉(zhuǎn)換第三列會出錯,因為這列里包含一個代表 0 的下劃線,pandas 無法自動判斷這個下劃線。為了解決這個問題,可以使用 to_numeric() 函數(shù)來處理第三列,讓 pandas 把任意無效輸入轉(zhuǎn)為 NaN。
          df = df.apply(pd.to_numeric, errors='coerce').fillna(0)

          8.優(yōu)化 DataFrame 對內(nèi)存的占用

          方法一:只讀取切實所需的列,使用usecols參數(shù)

          cols = ['beer_servings','continent']
          small_drinks = pd.read_csv('data/drinks.csv', usecols=cols)
          方法二:把包含類別型數(shù)據(jù)的 object 列轉(zhuǎn)換為 Category 數(shù)據(jù)類型,通過指定 dtype 參數(shù)實現(xiàn)。
          dtypes ={'continent':'category'}
          smaller_drinks = pd.read_csv('data/drinks.csv',usecols=cols, dtype=dtypes)

          9.根據(jù)最大的類別篩選 DataFrame

          movies = pd.read_csv('data/imdb_1000.csv')
          counts = movies.genre.value_counts()
          movies[movies.genre.isin(counts.nlargest(3).index)].head()

          10.把字符串分割為多列

          df = pd.DataFrame({'姓名':['張 三','李 四','王 五'],
          '所在地':['北京-東城區(qū)','上海-黃浦區(qū)','廣州-白云區(qū)']})
          df
          df.姓名.str.split(' ', expand=True)

          11.把 Series 里的列表轉(zhuǎn)換為 DataFrame

          df = pd.DataFrame({'列1':['a','b','c'],'列2':[[10,20], [20,30], [30,40]]})
          df

          df_new = df.列2.apply(pd.Series)
          pd.concat([df,df_new], axis='columns')

          12.用多個函數(shù)聚合

          orders = pd.read_csv('data/chipotle.tsv', sep='\t')
          orders.groupby('order_id').item_price.agg(['sum','count']).head()

          13.分組聚合

          import pandas as pd
          df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
          'key2':['one', 'two', 'one', 'two', 'one'],
          'data1':np.random.randn(5),
          'data2':np.random.randn(5)})
          df

          for name, group in df.groupby('key1'):
          print(name)
          print(group)

          dict(list(df.groupby('key1')))
          通過字典或Series進行分組
          people = pd.DataFrame(np.random.randn(5, 5),
          columns=['a', 'b', 'c', 'd', 'e'],
          index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
          mapping = {'a':'red', 'b':'red', 'c':'blue',
          'd':'blue', 'e':'red', 'f':'orange'}
          by_column = people.groupby(mapping, axis=1)
          by_column.sum()


          往期推薦:

          收藏 | 49 個 Python 學(xué)習(xí)資源

          我都逛哪些技術(shù)網(wǎng)站?(程序員必備58個網(wǎng)站匯總)

          肝!精心整理了 50 個數(shù)據(jù)源網(wǎng)站!


          瀏覽 74
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草视频日本 | 国产人妻国产毛片 | 日本乱婬妺妺躁爽A片 | 国产一级a毛一级a在线 | 一级大片|