日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python基础】Pandas笔记---通过比赛整理出的10条Pandas实用技巧

發布時間:2025/3/8 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python基础】Pandas笔记---通过比赛整理出的10条Pandas实用技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

前言

大家好,我是潛心。最近還在參加某比賽,將pandas對數據預處理的方法進行了總結,以下列出的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)?

主要參數介紹:

  • objs:多個對象;

  • axis:指定連接的軸,0(行)或1(列);

  • join:連接的方式,outer(外連接)或inter(內連接);

  • 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?3In[2]:?df2?=?pd.DataFrame(np.random.randint(10,?size=(2,?2)),?columns=['A',?'B'])A?B 0?3?9 1?8?6In[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?NaNIn[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?6In[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()

類似于關系數據庫的連接方式,根據一個或多個鍵(即列)將不同的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)

主要參數介紹:

  • left:DataFrame對象;

  • right:DataFrame對象;

  • how:連接方式,inner或outer;

  • on:指定用于連接的鍵,必須存在于左右兩個DataFrame中;

  • left_on:左側DataFrame中用于連接鍵的列名,當左右對象列名不同但含義相同時使用

  • right_on:右側DataFrame中用于連接鍵的列名;

  • left_index:使用左側DataFrame的行索引作為連接鍵(配合right_on);

  • right_index:使用右側DataFrame的行索引作為連接鍵(配合left_on);

  • sort:對其按照連接鍵進行排序;

例:

In[6]:?pd.merge(df1,?df2,?how='inner',?on='A')A?B_x?C?B_y 0?8?8?4?6In[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.0In[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中重復的行,重復通過參數subset指定。

主要用途:統計對象中不重復的個數;

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

主要參數介紹:

  • subset:指定的鍵(列),默認為所有的列(即每行全部相同);

  • keep:刪除重復項,除了第1個(first)或者最后一個(last);

  • inplace:是否直接對原來的對象進行修改,默認為False,生成一個拷貝;

  • ignore_index:是否重建索引;

例:

df1A?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?4In[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,再去重,統計個數。

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)

主要參數介紹:

  • 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對象數據量太大,導致做實驗過滿時,可以抽取一部分進行實驗,提高效率。

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

主要參數介紹:

  • n:指定采樣的數量;

  • 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?2In[13]:?df1.sample(frac=0.1)A?B?C 1?6?4?2

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

groupby方法是對對數據內部進行分組處理。

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

直觀理解:

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

主要參數介紹:

  • by:用于確定groupby的組;

  • axis:指定軸;

例(以下是最近構造的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。

例:

df1A?B?C 0?1.0?2?3 1?NaN?5?6In[14]:?df1.isna()A???B???C 0?False?False?False 1?True?False?False

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

In[15]:?df1.isnull().all()??#?某列是否全部為NaNA????False B????False C????False dtype:?boolIn[16]:?df1.isnull().any()?#?某列是否出現NaNA?????True B????False C????False dtype:?bool

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

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

主要參數介紹:

  • axis:指定軸;

  • how:參數為any時,行或列(axis決定)出現NaN時,就進行刪除;為all時,行或列全為NaN時才進行刪除;

  • thresh:閾值,要求不為NAN的個數;

  • subset:指定鍵(列)進行判斷NAN刪除;

  • inplace:是否更改原對象;

例:

In[17]:?df1.dropna(how='any')A?B?C 0??1?2?3In[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:需要判斷的值列表(不能為單個數值或字符串),可以為一個Series,或DataFrame(當對象為DataFrame);

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

df1A?B?C 0?1?2?3 1?4?\N?6 2?7?8?9In[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?7In[20]:?df1[df1.A?>?2]A?B?C 0?3?4?2 3?3?2?5 5?5?3?7?

10. 值替換---where()

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

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

例:

df1A?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?4In[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]?=?-1A???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()方法是對不滿足的進行替換,上述方法是對滿足條件的進行替換

總結

果然真正的打比賽才能發現有那么多知識已經遺忘,記得及時整理才能方便以后進行鞏固。

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):

總結

以上是生活随笔為你收集整理的【Python基础】Pandas笔记---通过比赛整理出的10条Pandas实用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。