<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>

          【Python基礎】Pandas筆記---通過比賽整理出的10條Pandas實用技巧

          共 5344字,需瀏覽 11分鐘

           ·

          2020-08-14 18:36

          點擊上方“潛心的Python小屋”關注我們,第一時間推送優(yōu)質(zhì)文章。

          前言

          大家好,我是潛心。最近還在參加某比賽,將pandas對數(shù)據(jù)預處理的方法進行了總結(jié),以下列出的10條是我覺得比較常用、好用的處理操作。

          本文約3k字,預計閱讀15分鐘。

          1. 連接Pandas對象---concat()

          concat方法是沿著某條軸,將多個DataFrame/Series對象進行連接在一起。

          主要用途:?對某些對象只進行簡單的行連接或列連接。

          def?concat(objs,?axis=0,?join="outer",?ignore_index:?bool?=?False,?keys=None,?levels=None,?names=None,?verify_integrity:?bool?=?False,?copy:?bool?=?True)?

          主要參數(shù)介紹:

          • objs:多個對象;
          • axis:指定連接的軸,0(行)或1(列);
          • join:連接的方式,outer(外連接)或inter(內(nèi)連接);
          • ingnore_index:是否重建索引;

          例:

          In[1]:?df1?=?pd.DataFrame(np.random.randint(10,?size=(3,?3)),?columns=['A',?'B',?'C'])
          ??
          ?A?B?C
          0?1?4?8
          1?8?8?4
          2?0?9?3

          In[2]:?df2?=?pd.DataFrame(np.random.randint(10,?size=(2,?2)),?columns=['A',?'B'])

          ?A?B
          0?3?9
          1?8?6

          In[3]:?pd.concat([df1,?df2],?axis=0,?join='outer')

          ?A?B?C
          0?1?4?8.0
          1?8?8?4.0
          2?0?9?3.0
          0?3?9?NaN
          1?8?6?NaN

          In[4]:?pd.concat([df1,?df2],?axis=0,?join='inner',?ignore_index=True)

          ?A?B
          0?1?4
          1?8?8
          2?0?9
          3?3?9
          4?8?6

          In[5]:?pd.concat([df1,?df2],?axis=1,?join='outer')

          ?A?B?C?A?B
          0?1?4?8?3.0?9.0
          1?8?8?4?8.0?6.0
          2?0?9?3?NaN?NaN

          2. 合并Pandas對象---merge()

          類似于關系數(shù)據(jù)庫的連接方式,根據(jù)一個或多個鍵(即列)將不同的DataFrame連接起來。

          主要用途:對于擁有相同的鍵的兩個DataFrame對象,需要將其進行有效的拼接,整合到一個對象。

          def?merge(left,?right,?how='inner',?on=None,?left_on=None,?right_on=None,
          ?????????left_index=False,?right_index=False,?sort=True,
          ?????????suffixes=('_x',?'_y'),?copy=True,?indicator=False,
          ?????????validate=None)

          主要參數(shù)介紹:

          • left:DataFrame對象;
          • right:DataFrame對象;
          • how:連接方式,inner或outer;
          • on:指定用于連接的鍵,必須存在于左右兩個DataFrame中;
          • left_on:左側(cè)DataFrame中用于連接鍵的列名,當左右對象列名不同但含義相同時使用;
          • right_on:右側(cè)DataFrame中用于連接鍵的列名;
          • left_index:使用左側(cè)DataFrame的行索引作為連接鍵(配合right_on);
          • right_index:使用右側(cè)DataFrame的行索引作為連接鍵(配合left_on);
          • sort:對其按照連接鍵進行排序;

          例:

          In[6]:?pd.merge(df1,?df2,?how='inner',?on='A')

          ?A?B_x?C?B_y
          0?8?8?4?6

          In[7]:?pd.merge(df1,?df2,?how='outer',?on='B')
          ??
          ?A_x?B?C?A_y
          0?1.0?4?8.0?NaN
          1?8.0?8?4.0?NaN
          2?0.0?9?3.0?3.0
          3?NaN?6?NaN?8.0

          In[8]:?pd.merge(df1,?df2,?how='outer',?left_on='B',?right_on='A')
          ??
          ???A_x?B_x?C?A_y?B_y
          0?1.0?4.0?8.0?NaN?NaN
          1?8.0?8.0?4.0?8.0?6.0
          2?0.0?9.0?3.0?NaN?NaN
          3?NaN?NaN?NaN?3.0?9.0

          3. 刪除重復項---drop_duplicates()

          刪除對象DataFrame中重復的行,重復通過參數(shù)subset指定。

          主要用途:統(tǒng)計對象中不重復的個數(shù);

          def?drop_duplicates(subset=None,?keep='first',?inplace=False,?ignore_index=False)

          主要參數(shù)介紹:

          • subset:指定的鍵(列),默認為所有的列(即每行全部相同);
          • keep:刪除重復項,除了第1個(first)或者最后一個(last);
          • inplace:是否直接對原來的對象進行修改,默認為False,生成一個拷貝;
          • ignore_index:是否重建索引;

          例:

          df1
          ?A?B?C
          0?3?2?4
          1?6?4?2
          2?3?4?3
          3?3?7?0
          4?5?1?6
          5?6?1?4

          In[9]:?df1.drop_duplicates('A')

          ?A?B?C
          0?3?2?4
          1?6?4?2
          4?5?1?6

          4. Series中的去重---unique()

          相比于drop_duplicates方法,unique()只針對于Series對象,類似于Set。

          主要用途:?通常是對DataFrame中提取某一鍵,變成Series,再去重,統(tǒng)計個數(shù)。

          Series.unique()

          例:

          In[10]:?len(df1['A'].unique().tolist())

          3

          5. 排序---sort_values()

          按照某個鍵進行排序。

          主要用途:查看相同鍵時行的某些變化,如例子中在A相同時B、C的變化。

          def?sort_values(by,?axis=0,?ascending=True,?kind='quicksort',?na_position='last',?ignore_index=False)

          主要參數(shù)介紹:

          • by:字符串或字符串列表,指定按照哪個鍵/索引進行排序;
          • axis:指定排序的軸;
          • ascending:升序或降序,默認為升序;
          • kind:指定排序方法,‘quicksort’, ‘mergesort’, ‘heapsort;
          • ignore_index:是否重建索引;

          例:

          In[11]:?df1.sort_values(by='A')
          ??
          ?A?B?C
          0?3?2?4
          2?3?4?3
          3?3?7?0
          4?5?1?6
          1?6?4?2
          5?6?1?4

          6. 采樣---sample()

          對對象進行采樣。

          主要用途:?當DataFrame對象數(shù)據(jù)量太大,導致做實驗過滿時,可以抽取一部分進行實驗,提高效率。

          def?sample(n=None,?frac=None,?replace=False,?weights=None,?random_state=None,?axis=None)

          主要參數(shù)介紹:

          • n:指定采樣的數(shù)量;
          • frac:指定采樣的比例,與n只能選擇其中一個;
          • replace:允許或不允許對同一行進行多次采樣;
          • weights:采樣的權重,默認為“None”將導致相同的概率權重;
          • random_state:類似于seed作用;
          • axis:指定采樣的軸,默認為行;

          例:

          In[12]:?df1.sample(n=3)
          ??
          ?A?B?C
          0?3?2?4
          3?3?7?0
          1?6?4?2

          In[13]:?df1.sample(frac=0.1)
          ??
          ??A?B?C
          1?6?4?2

          7. 對象分組---groupby()

          groupby方法是對對數(shù)據(jù)內(nèi)部進行分組處理。

          主要用途:?在數(shù)據(jù)挖掘中主要用在了Word2vec中,例如對每個用戶的行為進行分組,形成多個句子。

          直觀理解:

          def?groupby(by=None,?axis=0,?level=None,?as_index=True,?sort=True,?group_keys=True,?squeeze=False,?observed=False)

          主要參數(shù)介紹:

          • by:用于確定groupby的組;
          • axis:指定軸;

          例(以下是最近構(gòu)造的Word2vec中的句子):

          groups?=?df_log.groupby(['user_id'])
          df_log['creative_id']?=?df_log['creative_id'].astype('str')
          print('starting....')
          sentences?=?[groups.get_group(g)['creative_id'].tolist()?for?g?in?groups.groups]

          8. 判斷與刪除缺失值NaN---isna()、isnull()和dropna()

          isna方法返回一個布爾對象,每個元素是否為NaN。

          例:

          df1
          ?A?B?C
          0?1.0?2?3
          1?NaN?5?6

          In[14]:?df1.isna()

          ??A???B???C
          0?False?False?False
          1?True?False?False

          當數(shù)據(jù)量很大時,上述很難觀察到某列是否存在缺失,此時可以用isnull()方法

          In[15]:?df1.isnull().all()??#?某列是否全部為NaN

          A????False
          B????False
          C????False
          dtype:?bool
          ??
          In[16]:?df1.isnull().any()?#?某列是否出現(xiàn)NaN
          ??
          A?????True
          B????False
          C????False
          dtype:?bool

          dropna方法刪除含缺失值的行或列。

          def?dropna(axis=0,?how='any',?thresh=None,?subset=None,?inplace=False)

          主要參數(shù)介紹:

          • axis:指定軸;
          • how:參數(shù)為any時,行或列(axis決定)出現(xiàn)NaN時,就進行刪除;為all時,行或列全為NaN時才進行刪除;
          • thresh:閾值,要求不為NAN的個數(shù);
          • subset:指定鍵(列)進行判斷NAN刪除;
          • inplace:是否更改原對象;

          例:

          In[17]:?df1.dropna(how='any')
          ??
          ???A?B?C
          0??1?2?3

          In[18]:?df1.dropna(how='any',?subset=['B'])
          ??
          ?A??B?C
          0?1??2?3
          1?NaN?5?6

          9. 篩選或刪除特定值的行---isin()

          判斷對象中是否存在某個值(列表、Series或DataFrame)。

          主要用途:?當缺失值不為NaN時,例如缺失值是一個字符串“\N“(比賽中碰到了),要想更改或刪除,則用isin方法較為方便,通過加負號想刪除符合條件的行,不寫負號是篩選出符合條件的行。

          def?isin(values)
          • values:需要判斷的值列表(不能為單個數(shù)值或字符串),可以為一個Series,或DataFrame(當對象為DataFrame);

          例(刪除包含某字符串的行):

          df1
          ?A?B?C
          0?1?2?3
          1?4?\N?6
          2?7?8?9

          In[19]:?df1[-df1.B.isin(['\\N'])]
          ??
          ??
          ?A?B?C
          0?1?2?3
          2?7?8?9

          篩選過程中,isin()方法只能判斷包含,布爾方法則可以進行更豐富的篩選:

          df1?
          ?A?B?C
          0?3?4?2
          1?0?5?4
          2?0?7?5
          3?3?2?5
          4?2?0?0
          5?5?3?7

          In[20]:?df1[df1.A?>?2]
          ??
          A?B?C
          0?3?4?2
          3?3?2?5
          5?5?3?7?

          10. 值替換---where()

          通過布爾序列選擇一個返回的子集。

          主要用途:?對對象進行篩選,并且對于不滿足的值,where方法可以對其進行替換。例如若列為性別,元素為字符串,可將其進行替換為數(shù)值。

          例:

          df1
          ?A?B?C
          0?5?7?4
          1?2?0?5
          2?4?2?4
          3?2?6?2
          4?5?1?6
          5?3?3?4


          In[21]:?df1.where(df1?>?3,?-1)
          ?A???B???C
          0?5???7??4
          1?-1??-1?5
          2?4???-1?4
          3?-1??6???-1
          4?5???-1?6
          5?-1??-1?4

          關于值替換,還可以用如下布爾判斷方法:

          In[22]:?df1[df1.A?<=?3]?=?-1

          ?A???B???C
          0?5???7??4
          1?-1??0??5
          2?4???2??4
          3?-1??6???2
          4?5???1??6
          5?-1??3??4

          注意:?where()方法是對不滿足的進行替換,上述方法是對滿足條件的進行替換

          總結(jié)

          果然真正的打比賽才能發(fā)現(xiàn)有那么多知識已經(jīng)遺忘,記得及時整理才能方便以后進行鞏固。



          往期精彩回顧





          獲取一折本站知識星球優(yōu)惠券,復制鏈接直接打開:

          https://t.zsxq.com/662nyZF

          本站qq群1003271085。

          加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  九哥艹逼网| 日韩无码第一页 | 色色成人网 | 日本色色图 | 色色激情 |