快速介紹Python數據分析庫pandas的基礎知識和代碼示例

2021-01-11 deephub

「軟體工程師閱讀教科書作為參考時不會記住所有的東西,但是要知道如何快速查找重要的知識點。」

為了能夠快速查找和使用功能,使我們在進行機器學習模型時能夠達到一定流程化。我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!

本附註的結構:

導入數據導出數據創建測試對象查看/檢查數據選擇查詢數據清理篩選、排序和分組統計數據首先,我們需要導入pandas開始:

import pandas as pd

導入數據

使用函數pd.read_csv直接將CSV轉換為數據格式。

注意:還有另一個類似的函數pd。read_excel用於excel文件。

# Load data df = pd.read_csv('filename.csv') # From a CSV filedf = pd.read_excel('filename.xlsx') # From an Excel file

導出數據

tocsv()將數據存儲到本地的文件。我們可以通過df[:10].tocsv()保存前10行。我們還可以使用df.to_excel()保存和寫入一個DataFrame到Excel文件或Excel文件中的一個特定表格。

df.to_csv('filename.csv') # Write to a CSV filedf.to_excel('filename.xlsx') # Write to an Excel file

創建測試對象

從輸入的數據建立一個DataFrame

# Build data frame from inputted datadf = pd.DataFrame(data = {'Name': ['Bob', 'Sally', 'Scott', 'Katie'],'Physics': [68, 74, 77, 78], 'Chemistry': [84, 100, 73, 90], 'Algebra': [78, 88, 82, 87]})

或者從列表中創建一個series

# Create a series from an iterable my_listmy_list = [['Bob',78],['Sally',91], ['Scott',62], ['Katie',78], ['John',100]]df1 = pd.Series(my_list) # Create a series from an iterable my_list

查看/檢查數據

head():顯示DataFrame中的前n條記錄。我經常把一個數據檔案的最上面的記錄列印在我的jupyter notebook上,這樣當我忘記裡面的內容時,我可以回頭查閱。

df.head(3) # First 3 rows of the DataFrame

tail():返回最後n行。這對於快速驗證數據非常有用,特別是在排序或附加行之後。

df.tail(3) # Last 3 rows of the DataFrame

添加或插入行

要向DataFrame追加或添加一行,我們將新行創建為Series並使用append()方法。

在本例中,將新行初始化為python字典,並使用append()方法將該行追加到DataFrame。

在向append()添加python字典類型時,請確保傳遞ignore_index=True,以便索引值不會被使用。生成的軸將被標記為編號series0,1,…, n-1,當連接的數據使用自動索引信息時,這很有用。

append() 方法的作用是:返回包含新添加行的DataFrame。

#Append row to the dataframe, missing data (np.nan)new_row = {'Name':'Max', 'Physics':67, 'Chemistry':92, 'Algebra':np.nan}df = df.append(new_row, ignore_index=True)

向DataFrame添加多行

# List of series list_of_series = [pd.Series(['Liz', 83, 77, np.nan], index=df.columns),pd.Series(['Sam', np.nan, 94,70], index=df.columns ), pd.Series(['Mike', 79,87,90], index=df.columns), pd.Series(['Scott', np.nan,87,np.nan], index=df.columns),]# Pass a list of series to the append() to add multiple rowsdf = df.append(list_of_series , ignore_index=True)

我們也可以添加新的列

# Adding a new column to existing DataFrame in Pandassex = ['Male','Female','Male','Female','Male','Female','Female','Male','Male']df['Sex'] = sex

info()函數用於按列獲取標題、值的數量和數據類型等一般信息。一個類似但不太有用的函數是df.dtypes只給出列數據類型。

df.info() #Index, Datatype and Memory information

# Check data type in pandas dataframedf['Chemistry'].dtypes >>> dtype('int64')# Convert Integers to Floats in Pandas DataFramedf['Chemistry'] = df['Chemistry'].astype(float) df['Chemistry'].dtypes>>> dtype('float64')# Number of rows and columnsdf.shape >>> (9, 5)

value_counts()函數的作用是:獲取一系列包含唯一值的計數。

# View unique values and counts of Physics columndf['Physics'].value_counts(dropna=False)

選擇

在訓練機器學習模型時,我們需要將列中的值放入X和y變量中。

df['Chemistry'] # Returns column with label 'Chemistry' as Series

df[['Name','Algebra']] # Returns columns as a new DataFrame

df.iloc[0] # Selection by position

df.iloc[:,1] # Second column 'Name' of data frame

df.iloc[0,1] # First element of Second column>>> 68.0

數據清理

rename()函數在需要重命名某些選定列時非常有用,因為我們只需要指定要重命名的列的信息。

# Rename columnsdf = df.rename({'Name':'Student','Algebra':'Math'}, axis='columns')

在DataFrame中,有時許多數據集只是帶著缺失的數據的,或者因為它存在而沒有被收集,或者它從未存在過。

NaN(非數字的首字母縮寫)是一個特殊的浮點值,所有使用標準IEEE浮點表示的系統都可以識別它

pandas將NaN看作是可互換的,用於指示缺失值或空值。有幾個有用的函數用於檢測、刪除和替換panda DataFrame中的空值。

# Checks for null Values, Returns Boolean Arrraycheck_for_nan = df.isnull()

要檢查panda DataFrame中的空值,我們使用isnull()或notnull()方法。方法返回布爾值的數據名,對於NaN值為真。在相反的位置,notnull()方法返回布爾值的數據,對於NaN值是假的。

value = df.notnull() # Opposite of df2.isnull()

我們使用dropna()函數刪除所有缺少值的行。

drop_null_row = df.dropna() # Drop all rows that contain null values

有時,我們可能只是想刪除缺失值的列。

# Drop all columns that contain null valuesdrop_null_col = df.dropna(axis=1)

我們可以使用fillna()來填充缺失的值。例如,我們可能想用0替換' NaN '。

replace_null = df.fillna(0) # Replace all null values with 0

或者用平均值替換NaN。

# Replace all null values with the mean (mean can be replaced with almost any function from the statistics module)df = round(df.fillna(df.mean()),2)

方法可用於替換DataFrame中的值

one = df.replace(100,'A') # Replace all values equal to 1 with 'one'

篩選、排序和分組

找到看到物理成績達到80或80以上的學生

fil_80 = df[df['Physics'] > 80]

學生在化學考試中得到80分或更高的分數,數學考試中卻不到90分

fil = df[(df['Chemistry'] > 80) & (df['Math'] < 90)]

sort_values ()可以以特定的方式對pandas數據進行排序。通常回根據一個或多個列的值對panda DataFrame進行排序,或者根據panda DataFrame的行索引值或行名稱進行排序。

例如,我們希望按學生的名字按升序排序。

ascending = df.sort_values('Student')

化學分數按降序排列

descending = df.sort_values('Chemistry',ascending=False)

更複雜一點的,我們希望按物理分數的升序排序,然後按化學分數的降序排序。

df.sort_values(['Physics','Chemistry'],ascending=[True,False])

groupby 是一個非常簡單的概念。我們可以創建一組類別,並對類別應用一個函數。這是一個簡單的概念,但卻是我們經常使用的極有價值的技術。Groupby的概念很重要,因為它能夠有效地聚合數據,無論是在性能上還是在代碼數量上都非常出色。

通過性別進行分組

group_by = df.groupby(['Sex']) # Returns a groupby object for values from one columngroup_by.first() # Print the first value in each group

計算性別分組的所有列的平均值

average = df.groupby(『Sex』).agg(np.mean)

統計數據

我們可能熟悉Excel中的數據透視表,可以輕鬆地洞察數據。類似地,我們可以使用panda中可用的pivottable()函數創建Python pivot表。該函數與groupby()函數非常相似,但是提供了更多的定製。

假設我們想按性別將值分組,並計算物理和化學列的平均值和標準差。我們將調用pivot_table()函數並設置以下參數:

index設置為 'Sex',因為這是來自df的列,我們希望在每一行中出現一個唯一的值

values值為'Physics','Chemistry' ,因為這是我們想應用一些聚合操作的列

aggfunc設置為 'len','np.mean','np.std

pivot_table = df.pivot_table(index='Sex',values=['Physics','Chemistry'], aggfunc=[len, np.mean, np.std])

注意:使用len的時候需要假設數據中沒有NaN值。

description()用於查看一些基本的統計細節,如數據名稱或一系列數值的百分比、平均值、標準值等。

df.describe() # Summary statistics for numerical columns

使用max()查找每一行和每列的最大值

# Get a series containing maximum value of each rowmax_row = df.max(axis=1)

# Get a series containing maximum value of each column without skipping NaNmax_col = df.max(skipna=False)

類似地,我們可以使用df.min()來查找每一行或每列的最小值。

其他有用的統計功能:

sum():返回所請求的軸的值的總和。默認情況下,axis是索引(axis=0)。

mean():返回平均值

median():返回每列的中位數

std():返回數值列的標準偏差。

corr():返回數據格式中的列之間的相關性。

count():返回每列中非空值的數量。

總結

我希望這張小抄能成為你的參考指南。當我發現更多有用的Pandas函數時,我將嘗試不斷地對其進行更新。本文的代碼

github /Nothingaholic/Python-Cheat-Sheet/blob/master/pandas.ipynb

作者:XuanKhanh Nguyen

deephub翻譯組

相關焦點

  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • python機器學習:常用庫的介紹及安裝
    1、為了學習方便,建議大家安裝Anaconda(由於平臺不讓給出網站連結,所以具體連結直接百度搜一下就可以得到),為什麼建議使用這個軟體呢,因為安裝了這個軟體後本身就自帶了IPython、Numpy、pandas,scikit-learn等庫,不用你去在一步一步的去安裝其他的庫;並且該軟體兼容性不錯,可以在Mac OS, windows和linux上運行,一勞永逸,非常方便。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    其中,有些可能是相當有名的,有些可能是新的,但我相信下次您從事數據分析項目時,它們會非常有用。1.Profiling the pandas dataframeProfiling 是一個幫助我們理解數據的程序,而 Pandas Profiling 正是實現這一點的一個 python 包。
  • 在pandas中使用pipe()提升代碼可讀性
    簡介我們在利用pandas開展數據分析時,應儘量避免過於「碎片化」的組織代碼,尤其是創建出過多不必要的「中間變量」,既浪費了「內存」,又帶來了關於變量命名的麻煩,更不利於整體分析過程代碼的可讀性,因此以流水線方式組織代碼非常有必要。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    【每天幾分鐘,從零入門python編程的世界!】numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    python教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    Numpy內部解除了Python的PIL(全局解釋器鎖),運算效率極好,是大量機器學習框架的基礎庫! NumPy構建在Numeric代碼庫上,並添加了numarray引入的特性、擴展的C-API以及創建任意類型數組的能力,這也使得NumPy適合與通用資料庫應用程式進行接口。
  • 如何用Pandas庫實現MySQL資料庫的讀寫?
    本次分享將介紹如何在Python中使用Pandas庫實現MySQL資料庫的讀寫。首先我們需要了解點ORM方面的知識。  ORM技術  對象關係映射技術,即ORM(Object-Relational Mapping)技術,指的是把關係資料庫的表結構映射到對象上,通過使用描述對象和資料庫之間映射的元數據,將程序中的對象自動持久化到關係資料庫中。在Python中,最有名的ORM框架是SQLAlchemy。
  • 大數據分析Python NumPy庫使用教程
    在處理數據時,有一個功能強大的庫可以極大地提高代碼的效率,尤其是在處理大型數據集時:NumPy。這意味著您不需要具有NumPy的任何經驗,也不會浪費任何時間學習與數據工程工作無關的東西。 在瀏覽了基礎知識之後,您將快速開始使用NumPy來構建和操作二維和三維數組。掌握陣列將使您能夠一次對大量數據進行計算,而不必逐行循環,從而節省了時間和處理能力。
  • Pandas自動進行探索性數據分析,節省可視化和理解數據的時間
    根據Wikipedia的說法,探索性數據分析(EDA)是一種分析數據集以總結其主要特徵的方法,通常使用視覺方法。因此,EDA是理解基礎數據,變量分布及其相關性的過程。這使得EDA成為構建任何統計模型之前任何數據科學過程中的第一步。
  • pandas庫中最重要的幾個知識點
    前言本篇是【機器學習與數據挖掘】頭條號原創首發Python數據分析系列文章的第四篇Python數據分析系列文章之Python基礎篇Python數據分析系列文章之NumpyPython數據分析系列文章之Pandas(上)Python數據分析系列文章之Pandas(下)Python數據分析系列文章之ScipyPython數據分析系列文章之MatplotlibPython
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    全文共2071字,預計學習時長6分鐘Pandas庫目前已經成為用Python進行探索性數據分析的絕佳伴侶。它功能豐富,靈活易用,成為了當今許多數據科學家的首選。Pandas庫的社區也很完善,這讓它能夠一直積極發展和改進。提到Pandas,就不得不提到這兩種工具:· 可以用簡短的代碼執行基本EDA的工具。
  • 想成為高效數據科學家?不會Pandas怎麼行
    選自 towardsdatascience作者:Félix Revert機器之心編譯參與:Nurhachu Null、張倩Pandas 是為了解決數據分析任務而創建的一種基於 NumPy 的工具包,囊括了許多其他工具包的功能,具有易用、直觀、快速等優點。
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能
  • 懶人秘籍:教你如何避免編寫pandas代碼
    來源:PexelsPandas在數據科學領域無需介紹,它提供高性能,易於使用的數據結構和數據分析工具。但是,在處理過多的數據時,單核上的Pandas就顯得心有餘而力不足了,大家不得不求助於不同的分布式系統來提高性能。
  • 數據工程師需要掌握的 18 個 Python 庫
    作者 | 劉早起早起責編 | 屠敏本文對Python中在數據分析中需要掌握的庫進行了整理,一起來看看吧!它是一個工具箱,通過解析文檔為用戶提供需要抓取的數據,因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程式。可以使用 brew install beautifulsoup4 的方式來快速安裝bf4。數據清洗Spacyspacy可以用於進行分詞,命名實體識別,詞性識別等等,最核心的數據結構是Doc和Vocab。
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    Pandas是近年來最好的數據操作庫之一。它允許切片、分組、連接和執行任意數據轉換。如果你熟練的使用SQL,那麼這篇文章將介紹一種更直接、簡單的使用Pandas處理大多數數據操作案例。假設你對SQL非常的熟悉,或者你想有更可讀的代碼。或者您只是想在dataframe上運行一個特殊的SQL查詢。或者,也許你來自R,想要一個sqldf的替代品。
  • 圖解四個實用的pandas函數!
    作者:Baijayanta Roy來源:towardsdatascience編譯&內容補充:早起Python在用python進行機器學習或者日常的數據處理中,pandas是最常用的Python庫之一,熟練掌握pandas是每一個數據科學家的必備技能,本文將用代碼+圖片詳解Pandas中的四個實用函數!
  • 懂Excel也能輕鬆入門Python數據分析包pandas(二):高級篩選(上)
    更多 Python 數據處理的乾貨,敬請關注!!!!系列文章:懂Excel就能輕鬆入門Python數據分析包pandas(一):篩選功能前言經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。