想成為高效數據科學家?不會Pandas怎麼行

2021-01-10 機器之心Pro

選自 towardsdatascience

作者:Félix Revert

機器之心編譯

參與:Nurhachu Null、張倩

Pandas 是為了解決數據分析任務而創建的一種基於 NumPy 的工具包,囊括了許多其他工具包的功能,具有易用、直觀、快速等優點。要想成為一名高效的數據科學家,不會 Pandas 怎麼行?

Python 是開源的,它很棒,但是也無法避免開源的一些固有問題:很多包都在做(或者在嘗試做)同樣的事情。如果你是 Python 新手,那麼你很難知道某個特定任務的最佳包是哪個,你需要有經驗的人告訴你。有一個用於數據科學的包絕對是必需的,它就是 pandas。

pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。

pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。

如果你早已熟知 python 的使用,可以直接跳到第三段。

讓我們開始吧:

import pandas as pd別問為什麼是「pd」而不是「p」,就是這樣。用就行了:)

pandas 最基本的功能

讀取數據

data = pd.read_csv('my_file.csv')data = pd.read_csv('my_file.csv', sep=';', encoding='latin-1', nrows=1000, skiprows=[2,5])sep 代表的是分隔符。如果你在使用法語數據,excel 中 csv 分隔符是「;」,因此你需要顯式地指定它。編碼設置為'latin-1'來讀取法語字符。nrows=1000 表示讀取前 1000 行數據。skiprows=[2,5] 表示你在讀取文件的時候會移除第 2 行和第 5 行。

最常用的功能:read_csv, read_excel其他一些很棒的功能:read_clipboard, read_sql

寫數據

data.to_csv('my_new_file.csv', index=None)index=None 表示將會以數據本來的樣子寫入。如果沒有寫 index=None,你會多出一個第一列,內容是 1,2,3,...,一直到最後一行。

我通常不會去使用其他的函數,像.to_excel, .to_json, .to_pickle 等等,因為.to_csv 就能很好地完成工作,並且 csv 是最常用的表格保存方式。

檢查數據

Gives (#rows, #columns)給出行數和列數

data.describe()計算基本的統計數據

查看數據

data.head(3)列印出數據的前 3 行。與之類似,.tail() 對應的是數據的最後一行。

data.loc[8]列印出第八行

data.loc[8, 'column_1']列印第八行名為「column_1」的列

data.loc[range(4,6)]第四到第六行(左閉右開)的數據子集

pandas 的基本函數

邏輯運算

data[data['column_1']=='french']data[(data['column_1']=='french') & (data['year_born']==1990)]data[(data['column_1']=='french') & (data['year_born']==1990) & ~(data['city']=='London')]通過邏輯運算來取數據子集。要使用 & (AND)、 ~ (NOT) 和 | (OR),必須在邏輯運算前後加上「and」。

data[data['column_1'].isin(['french', 'english'])]除了可以在同一列使用多個 OR,你還可以使用.isin() 函數。

基本繪圖

matplotlib 包使得這項功能成為可能。正如我們在介紹中所說,它可以直接在 pandas 中使用。

data['column_numerical'].plot()

().plot() 輸出的示例

data['column_numerical'].hist()畫出數據分布(直方圖)

.hist() 輸出的示例

%matplotlib inline如果你在使用 Jupyter,不要忘記在畫圖之前加上以上代碼。

更新數據

data.loc[8, 'column_1'] = 'english'將第八行名為 column_1 的列替換為「english」

data.loc[data['column_1']=='french', 'column_1'] = 'French'

在一行代碼中改變多列的值

好了,現在你可以做一些在 excel 中可以輕鬆訪問的事情了。下面讓我們深入研究 excel 中無法實現的一些令人驚奇的操作吧。

中級函數

統計出現的次數

data['column_1'].value_counts()

.value_counts() 函數輸出示例

在所有的行、列或者全數據上進行操作

data['column_1'].map(len)len() 函數被應用在了「column_1」列中的每一個元素上

.map() 運算給一列中的每一個元素應用一個函數

data['column_1'].map(len).map(lambda x: x/100).plot()pandas 的一個很好的功能就是鏈式方法(https://tomaugspurger.github.io/method-chaining)。它可以幫助你在一行中更加簡單、高效地執行多個操作(.map() 和.plot())。

data.apply(sum).apply() 會給一個列應用一個函數。

.applymap() 會給表 (DataFrame) 中的所有單元應用一個函數。

tqdm, 唯一的

在處理大規模數據集時,pandas 會花費一些時間來進行.map()、.apply()、.applymap() 等操作。tqdm 是一個可以用來幫助預測這些操作的執行何時完成的包(是的,我說謊了,我之前說我們只會使用到 pandas)。

from tqdm import tqdm_notebooktqdm_notebook().pandas()用 pandas 設置 tqdm

data['column_1'].progress_map(lambda x: x.count('e'))用 .progress_map() 代替.map()、.apply() 和.applymap() 也是類似的。

在 Jupyter 中使用 tqdm 和 pandas 得到的進度條

相關性和散射矩陣

data.corr()data.corr().applymap(lambda x: int(x*100)/100)

.corr() 會給出相關性矩陣

pd.plotting.scatter_matrix(data, figsize=(12,8))

散點矩陣的例子。它在同一幅圖中畫出了兩列的所有組合。

pandas 中的高級操作

The SQL 關聯

在 pandas 中實現關聯是非常非常簡單的

data.merge(other_data, on=['column_1', 'column_2', 'column_3'])關聯三列只需要一行代碼

分組

一開始並不是那麼簡單,你首先需要掌握語法,然後你會發現你一直在使用這個功能。

data.groupby('column_1')['column_2'].apply(sum).reset_index()按一個列分組,選擇另一個列來執行一個函數。.reset_index() 會將數據重構成一個表。

正如前面解釋過的,為了優化代碼,在一行中將你的函數連接起來。

行迭代

dictionary = {}for i,row in data.iterrows(): dictionary[row['column_1']] = row['column_2'].iterrows() 使用兩個變量一起循環:行索引和行的數據 (上面的 i 和 row)

總而言之,pandas 是 python 成為出色的程式語言的原因之一

我本可以展示更多有趣的 pandas 功能,但是已經寫出來的這些足以讓人理解為何數據科學家離不開 pandas。總結一下,pandas 有以下優點:

易用,將所有複雜、抽象的計算都隱藏在背後了;直觀;快速,即使不是最快的也是非常快的。

它有助於數據科學家快速讀取和理解數據,提高其工作效率。

原文連結:https://towardsdatascience.com/be-a-more-efficient-data-scientist-today-master-pandas-with-this-guide-ea362d27386

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

相關焦點

  • pandas指南:做更高效的數據科學家
    skiprows=[2,5]表示在讀取文件時將刪除第2行和第5行最常用的函數:read_csv, read_excel還有一些很不錯的函數:read_clipboard、read_sql2、寫入數據index=None將簡單地按原樣寫入數據。如果你不寫index=None,會得到額外的行。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    pandas(pannel data analysis,面板數據分析),我個人覺得pandas用於數據分析處理有別於Python字典和列表的主要在於以下三點。運算效率提升,pandas是基於numpy寫的,換句話說也是c語言進行編寫並編譯成本地庫的,在運算效率會高很多。消耗資源少,因為pandas採用矩陣運算,在算法結構上比列表和字典組合數據消耗更少資源。
  • 懂Excel就能輕鬆入門Python數據分析包pandas(七):分列
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言今天從兩個需求來看看數據分列功能,由於 Excel 自帶功能比較弱,在處理稍微複雜的需求時會顯得力不從心,因此,本系列文章將引入 Excel 中一個非常高效的數據處理插件—— Power Query,並且看看 pandas 是怎樣靈活解決。
  • 懂Excel輕鬆入門Python數據分析包pandas(二十一):透視表
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言本系列上一節文章最後我隨手使用了 pandas 中的透視表操作,之後有些小夥伴詢問我相關的問題。正好 pandas 的 pivot_table 也是與 Excel 透視表對應。本文簡單教你入門使用 pandas 完成透視表功能。
  • 高效的5個pandas函數,你都用過嗎?
    之前為大家介紹過10個高效的pandas函數,頗受歡迎,裡面的每一個函數都能幫我們在數據分析過程中節省時間。高效的10個Pandas函數,你都用過嗎?pandas還有很多讓人舒適的用法,這次再為大家介紹5個pandas函數,作為這個系列的第二篇。1. explodeexplode用於將一行數據展開成多行。
  • 如何用pandas更快地進行數據可視化?
    作者:劉早起來源:早起Python(公眾號)如果你經常使用Python進行數據分析,那麼對於pandas一定不會陌生,但是Pandas除了在數據處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比matplotlib更加適用,本文就將介紹如何用
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • 提高數據處理效率,一行代碼開啟Pandas四倍速!
    快來了解新庫Modin,可以分割pandas的計算量,提高數據處理效率,一行代碼即刻開啟Pandas四倍速。首先了解一些基礎知識:Pandas作為Python中用於處理數據的庫,能簡單且靈活地處理不同種類、大小的數據。除此之外,Pandas還有許多函數有助於輕鬆處理不同數據。
  • 數據科學家的技能樹該怎麼點?
    作為一名數據科學家,你使用什麼方法?你還有其它方法嗎?數據科學家必須要會使用SQL嗎?本文將討論SQL在數據科學中的作用,以及結構化查詢語言(SQL)的替代方法。SQL是否需要了解SQL具體取決於個人所屬公司和數據科學團隊。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 數據處理利器Pandas在python中的基本數據操作
    按行排序按值排序Series:DataFrame:刪除指定軸上的項即刪除Series的元素或DataFrame的某一行(列)的意思,我們可以通過對象的drop(labels, axis=0)方法實現此功能。
  • 快速介紹Python數據分析庫pandas的基礎知識和代碼示例
    「軟體工程師閱讀教科書作為參考時不會記住所有的東西,但是要知道如何快速查找重要的知識點。」為了能夠快速查找和使用功能,使我們在進行機器學習模型時能夠達到一定流程化。我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!
  • PANDAS: 新手教程 一
    一旦我們加載了數據,我們想回顧一下。panda提供了不同的api,我們可以使用它們來探索數據。head( )這類似於SQL中的TOP命令,從數據幀的開始給我們提供前'n'條記錄。# 從數據幀中選擇前5(n=5)條記錄titanic_data.head(5)tail( )這給了我們數據幀末尾的「n」條記錄。
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    全文共2071字,預計學習時長6分鐘Pandas庫目前已經成為用Python進行探索性數據分析的絕佳伴侶。它功能豐富,靈活易用,成為了當今許多數據科學家的首選。Pandas庫的社區也很完善,這讓它能夠一直積極發展和改進。提到Pandas,就不得不提到這兩種工具:· 可以用簡短的代碼執行基本EDA的工具。
  • 用Python做數據分析:Pandas常用數據查詢語法
    如果誰能把常用的數據查詢語法做個對比就好了 ",我也曾不止一次地想享受前人的成果,無奈發現網上的文章側重不同且深淺不一,還涉及到一些Pandas新老版本的問題,於是決定自己動手。 切片-只給我看我關心的行 接下來就是涉及一些條件值的問題,例如我只關心Team為A的數據,在Excel裡是篩選框操作,在SQL裡寫個where就能搞定,在Pandas裡需要做切片。 查看Pandas文檔時,你可能已經見過各種切片的函數了,有loc,iloc,ix,iy,這裡不會像教科書一樣所有都講一通讓讀者搞混。這種根據列值選取行數據的查詢操作,推薦使用loc方法。
  • 想讓pandas運行更快嗎?那就用Modin吧
    Pandas 是數據科學領域的工作者都熟知的程序庫。它提供高性能、易於使用的數據結構和數據分析工具。但是,當處理過於龐大的數據時,單個內核上運行的 Pandas 就會變得力不從心,人們不得不求助於不同的分布式系統來提高性能。然而,為了提高性能而做的這種權衡會帶來陡峭的學習曲線。本質上,用戶只是想讓 Pandas 運行得更快,而不是為了特定的硬體設置而優化其工作流。
  • 懂Excel也能輕鬆入門Python數據分析包pandas(二):高級篩選(上)
    更多 Python 數據處理的乾貨,敬請關注!!!!系列文章:懂Excel就能輕鬆入門Python數據分析包pandas(一):篩選功能前言經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。
  • Pandas>>sample()函數 隨機選取若干行
    Pandas>>sample()函數 隨機選取若干行功能說明有時候我們只需要數據集中的一部分,並不需要全部的數據。這個時候我們就要對數據集進行隨機的抽樣。pandas中自帶有抽樣的方法。['張十',10,10] ], columns =['name','number_1','number_2'] )data_test1.抽取的行數data_test.sample(n=3)2.frac:抽取行的比例
  • 如何使用Pandas-Profiling進行探索性數據分析
    當開始一個新的機器學習項目時,獲得機器學習數據集之後的第一步就是要了解它。我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?
  • 6個提升效率的pandas小技巧
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.