數據分析利器 pandas 系列教程(一):從 Series 說起

2021-12-23 月小水長

從今天開始連載數據分析利器 pandas 的系列文章,推薦 Pycharm 集成 Python3.6+;無論你是零基礎小白,還是已經上手過 pandas,你都可以在本次系列中學到一些乾貨。

摘自百度百科:pandas 是基於 numpy 的一種工具,該工具是為了解決數據分析任務而創建的。pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas 提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使 Python 成為強大而高效的數據分析環境的重要因素之一。

雖然 pandas 基於 numpy,但是在開始 pandas 系列文章前,我並不打算先介紹 numpy 的具體使用,因為 numpy 著重解決的是多維列表或矩陣的數學運算問題,pandas 設計之初就是為了解決實際問題,我認為可以直接上手 pandas,在系列教程中,我會儘量預設讀者朋友們沒有 numpy 基礎,或者說,需要 numpy 知識的地方,我會直接帶著說出,我會儘量以 最簡潔的文字最少的預備知識,講完整個 pandas 系列。

作為系列的開篇,本文的中心任務是讓每一個讀者都熟悉 pandas 中的一種數據結構的概念和基本操作,它就是 Series

Series 是一種類似於 一維 數組的對象,由一組數據(數據類型可以是整數、浮點數、字符串和其他 Python 對象)和與之同長度的索引(或稱標籤)組成。舉個例子:

import pandas as pd
# 標籤 1 索引 數據'a', 標籤 2 索引數據 'b'...
s = pd.Series(data=['a','b','c','d'],index=[1,2,3,4])
print(s)

創建 Series 的三種方式

對於構造函數 pd.Series(),我們最常關心的三個參數是 數據 data、索引 index 和 數據類型dtype,分別可以通過 Series 的 values、index 和 dtype 屬性訪問。

# 代碼接上一段,後同
print(s.values)
print(s.index)
print(s.dtype)

data 是必選參數,index 如預設,其默認是 range(len(data)),如上面的代碼沒有指定 index,則 index = [0,1,2,3],而不是[1,2,3,4];dtype 如預設,默認為 object;

通過數組(列表)創建

data = ['l','o','v','e']
s1 = pd.Series(data=data)
print(s1)


通過字典創建

data = {'math':100,'english':94,'chinese':'95'}
s2 = pd.Series(data=data)
print(s2)

可以看到,字典的 鍵 作為索引,值 作為數據,創建了 Series

通過常量創建

通過這種方式創建,必須指定 index,他們都索引到同一個值,這個值就是我們給出的常量。

s3 = pd.Series(1,index=[1,2,3,4,5])
print(s3)

查詢 Series 的四種方式

以 Series s2 為例:

切片

Series 類似於列表,也提供了切片操作:

print(s2[1:3])


對於切片,要注意兩點:一是下標是從 0 開始的,二是前閉後開區間,[1:3] 只包括下標 1、2,也就是 Series 的第二、第三個數據,注意切片的下標和 Series 的 index 沒有關係。

index 索引

這種方式類似於字典的按鍵取值

print('math',s2['math'])

上面的代碼將會列印出 100,也可以 s2.get('math') 取到 100,如果不確定 math 是否存在於 s2 中,可以通過 s2.get('math',101) 設置預設值 101,如果不存在,則會返回 101 而不會報錯。

head()/tail()

見名知意,head() 是取前幾個數據,tail() 是取後幾個數據。

print(s2.head())
print(s2.head(2))


默認是取 5 個,如果不足 5 個則取全部。

條件查詢

print("\n成績大於 95 的科目:\n",s2[s2>95])
print("\n成績等於 95 的科目:\n",s2[s2==95])
print("\n成績大於等於 95 的科目:\n",s2[s2>=95])


其他常用函數新增一行數據

有兩個函數:append() 和 set_value() 可以完成該功能,不過 append() 只接受 Series/DataFrame 形式參數,是通過新建了一個 Series 完成了修改,必須接受它的返回值;set_value() 比較像 Python 內置的字典新增 item 的方式,是原地修改。

s2 = s2.append(pd.Series({'music':98}))
print(s2)
s2.set_value('history',99)
print(s2)


注意上面的警告,set_value() 會在未來的版本中廢棄,推薦用 .at[] 或者 .iat[] 表達式。

s2.at['history'] = 93
s2.at['geo'] = 91
print(s2)


通過實驗發現 .at[] 和前面的 index 索引查詢效果幾乎相同,都可查詢,可修改,可新增;所以 .get()/[] 不僅是查詢方式,還可以修改新增;.at[] 也可作為查詢方式之一,用法靈活。

.iat[] 和 .at[] 僅一個 i 的區別,功能相同,這個 i 代表整數的英文 Integer,代表 .iat[] 僅可通過下標訪問數據,如修改 math 的成績為 99:

s2.iat[0] = 99
print(s2)


刪除一行數據

使用 drop() 函數即可,注意它不默認是原地修改,需要接收返回值:

s2 = s2.drop('math')
print(s2)


可以通過設置參數 inplace=True 而變成原地修改,下面的代碼和上面的代碼效果完全相同:

s2.drop('math',inplace=True)
print(s2)

去重

如果僅僅是想獲得 data 中的不重複數據,直接用 unique() , 它返回一個列表,Series 本身並沒有變化;
如果想去掉 Series 裡的重複數據,推薦用 drop_duplicates(),它也有 inplace 參數,另一個重要的參數是 keep,常取值 first/last,即在重複數據中,保留第一個/最後一個。

s2['english'] = 95
print(s2.unique(),'\n')
print(s2,'\n')
s2.drop_duplicates(keep='last',inplace=True)
print(s2)


排序

通過 sort_values() 完成排序,主要關注參數 inplace 和 ascending(是否按升序排序,默認為 True,即默認升序排列:

s2.sort_values(inplace=True,ascending=True)
print(s2)


缺失值檢測

函數對 isnull()/notnull() 是一對反義函數,見名知意,缺失值檢測,返回和 data 同長度的 bool 列表:

s2['bio'] = None
print(s2.isnull(),'\n')
print(s2.notnull())


Series 到此為止,作為 pandas 兩種數據結構之一,它是另一種數據結構 DataFrame 的基礎,只不過 Series 是一維的,DataFrame 是二維表格式的,下一篇就談 DataFrame,在此之前請先消化好 Series。

相關焦點

  • 數據分析利器 pandas 系列教程(二):強大的 DataFrame
    在上一篇文章 數據分析利器 pandas 系列教程(一):從 Series 說起  中:詳細介紹了 pandas 基礎數據結構 Series,今天說說另一種數據結構 DataFrame。dataframe 是表格型的數據結構,由一組有序的列組成,可以看成是由 Series 組成的字典,舉個例子:/namesexcoursegrade0Bobmalemath991Alicefemaleenglish922Joemalechinese893Bobmalechinese884Alicefemalechinese955Joemaleenglish936Bobmaleenglish957Alicefemalemath798Joemalemath89
  • 數據分析必備利器——《Pandas 使用教程》
    Pandas 是非常著名的開源數據處理庫,我們可以通過它完成對數據集進行快速讀取、轉換、過濾、分析等一系列操作。除此之外,Pandas 擁有強大的缺失數據處理與數據透視功能,可謂是數據預處理中的必備利器。這是 Pandas 使用教程的第 1 章節,將學會安裝它,並了解 Pandas 的數據結構。
  • 數據分析利器 pandas 系列教程(四):對比 sql 學 pandas
    pandas 教程的第四篇,本篇將對比 sql 語言,學習 pandas 中各種類 sql 操作,文章篇幅較長,可以先收藏後食用,但不可以收藏後積灰~為了方便,依然以下面這個 DataFrame 為例,其變量名為 df,設有一同樣結構的 SQL 表,表名為 tb:
  • Python 數據處理庫 pandas 入門教程
    本文是對它的一個入門教程。pandas提供了快速,靈活和富有表現力的數據結構,目的是使「關係」或「標記」數據的工作既簡單又直觀。它旨在成為在Python中進行實際數據分析的高級構建塊。入門介紹pandas適合於許多不同類型的數據,包括:由於這是一個Python語言的軟體包,因此需要你的機器上首先需要具備Python語言的環境。
  • 小白學 Python 數據分析(3):Pandas (二)數據結構 Series
    在家為國家做貢獻太無聊,不如跟我一起學點 Python順便問一下,你們都喜歡什麼什麼樣的文章封面圖,老用這一張感覺有點醜人生苦短,我用 Python前文傳送門:小白學 Python 數據分析(1):數據分析基礎小白學 Python 數據分析(2):Pandas (一)概述引言先介紹下 Pandas 的數據結構,畢竟數據結構是萬物的基礎。
  • Python 數據處理庫 pandas 進階教程
    前言本文緊接著前一篇的入門教程,會介紹一些關於pandas的進階知識。建議讀者在閱讀本文之前先看完pandas入門教程。 同樣的,本文的測試數據和源碼可以在這裡獲取: Github:pandas_tutorial 。數據訪問在入門教程中,我們已經使用過訪問數據的方法。這裡我們再集中看一下。
  • Pandas 數據結構 - Series
    Pandas Series 類似表格中的一個列(column),類似於一維數組,可以保存任何數據類型。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • Pandas 數據處理 | Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date
  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那麼不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。標準循環數據幀是具有行和列的 pandas 對象。
  • Python 數據分析:Pandas 進階
    概述我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹,本文我們進一步來學習 Pandas 的一些使用。2. 缺失項在現實中我們獲取到的數據有時會存在缺失項問題,對於這樣的數據,我們通常需要做一些基本處理,下面我們通過示例來看一下。
  • 數據科學 | 從 Pandas 小白到 Pandas 能手
    在本文中,作者從 Pandas 的簡介開始,一步一步講解了 Pandas 的發展現狀、內存優化等問題。這是一篇最佳實踐教程,既適合用過 Pandas 的讀者,也適合沒用過但想要上手的小白。通過本文,你將有望發現一到多種用 pandas 編碼的新方法。Pandas 發展現狀;內存優化;索引;方法鏈;隨機提示。
  • 國外大神製作的超棒 Pandas 可視化教程
    Pandas 是一個開源、能用於數據操作和分析的 Python 庫。1.加載數據加載數據最方便、最簡單的辦法是我們能一次性把表格(CSV 文件或者 EXCEL 文件)導入。然後我們能用多種方式對它們進行切片和裁剪。Pandas 可以說是我們加載數據的完美選擇。
  • Pandas 數據篩選清洗
    ,並根據允許丟失的數據來確定閥值fillna用某些值來填充缺失的數據或使用插值的方法isnull返回表明哪些值是缺失值的布爾值notnullisnull的反函數string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])string_data.isnull
  • 讓數據分析更簡單的Panda技巧:萬能轉格式、輕鬆合併、數據壓縮...
    ↑ 關注 + 置頂 ~ 別錯過小z的乾貨內容 作者:Roman Orac魚羊 編譯整理量子位 報導 | 公眾號 QbitAI數據分析現在,數據科學家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。了解了這些技巧,能讓你在學習、使用 Pandas 的時候更加高效。
  • 100 個 pandas 數據分析函數總結
    (點擊上方快速關注並設置為星標,一起學Python)來源:數據分析1480
  • 5分鐘掌握Pandas GroupBy
    我們希望比較不同營銷渠道,廣告系列,品牌和時間段之間的轉化率,以識別指標的差異。Pandas是非常流行的python數據分析庫,它有一個GroupBy函數,提供了一種高效的方法來執行此類數據分析。在本文中,我將簡要介紹GroupBy函數,並提供這個工具的核心特性的代碼示例。
  • 通過 SQL 查詢學習 Pandas 數據處理
    ://shzhangji.com/cnblogs/2017/07/23/learn-pandas-from-a-sql-perspective/Pandas 是一款廣泛使用的數據處理工具。結合 NumPy 和 Matplotlib 類庫,我們可以在內存中進行高性能的數據清洗、轉換、分析及可視化工作。雖然 Python 本身是一門非常容易學習的語言,但要熟練掌握 Pandas 豐富的 API 接口及正確的使用方式,還是需要投入一定時間的。對於數據開發工程師或分析師而言,SQL 語言是標準的數據查詢工具。
  • Pandas 數據類型操作
    本文總結了 Pandas 中進行數據類型轉換的三種基本方法,同時介紹了基於數據類型取數的方法:使用 Pandas 提供的函數如 to_numeric()、to_datetime() 等進行轉化一、Pandas、Python、Numpy 各自支持的數據類型 下表中展示的是 Pandas