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

2020-12-18 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翻譯組

相關焦點

  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    其中,有些可能是相當有名的,有些可能是新的,但我相信下次您從事數據分析項目時,它們會非常有用。1.Profiling the pandas dataframeProfiling 是一個幫助我們理解數據的程序,而 Pandas Profiling 正是實現這一點的一個 python 包。
  • Python基礎 | 為什麼需要Pandas的DataFrame類型
    ,經常會使用到的一個庫,提供了非常豐富的數據類型和方法,以簡化對數據的處理和分析。前面幾篇文章已經介紹了Python自帶的list()以及強大的numpy提供的ndarray類型,這些數據類型還不夠強大嗎?為什麼還需要新的數據類型呢?在學習新的知識的時候,一方面需要了解這個新的概念是什麼,另外還需要了解為什麼需要學習這個新的知識,以往的知識不能解決問題嗎?不能滿足需要嗎?只有搞明白了為什麼的問題,才能靈活的應用新的知識和技能解決問題。
  • 數據科學家需要簡潔的Python代碼
    一方面,有一些數據工程師非常看重高度可靠,穩固的代碼,這些代碼承擔的技術債務少。另一方面,有些數據科學家非常重視概念驗證(e.g.設置)中想法和算法的快速原型設計。最近,我寫了一篇關於為什麼數據科學家的代碼傾向於遭受平庸之苦的評論文章,在這篇文章中,我希望介紹一些方法供新手數據科學家編寫更清晰的Python代碼並更好地構建小型項目,以及闡明減少技術債務在不經意間給你和所在團隊帶來的負作用。下面的內容既不詳盡也不足夠嚴謹,旨在以淺顯的方式介紹深層次建立數據科學項目的方式。
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    全文共2071字,預計學習時長6分鐘Pandas庫目前已經成為用Python進行探索性數據分析的絕佳伴侶。它功能豐富,靈活易用,成為了當今許多數據科學家的首選。Pandas庫的社區也很完善,這讓它能夠一直積極發展和改進。
  • 210809:Python.Pandas.DataFrame.基礎操作.1
    學習資料:騰訊課堂.貪心科技.十周成為數據分析師.周.第一階段.上原課連結:https://ke.qq.com/course/package/30758--Pandas是Python的外部包,若要使用,需先安裝。都說Python非常適合做數據分析,主要原因便是有很多Pandas這樣的完善、現成的數據分析包可以使用。
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    Pandas是近年來最好的數據操作庫之一。它允許切片、分組、連接和執行任意數據轉換。如果你熟練的使用SQL,那麼這篇文章將介紹一種更直接、簡單的使用Pandas處理大多數數據操作案例。假設你對SQL非常的熟悉,或者你想有更可讀的代碼。或者您只是想在dataframe上運行一個特殊的SQL查詢。
  • 想用Python做數據可視化?先邁過這個「坎」
    python的人都會面臨一個問題,尤其是初學者:我應該選哪個來實現數據可視化? 以下就是將要用來創建繪製數據的示例: ·Pandas ·Seaborn ·Ggplot 在示例中,我將使用pandas進行數據處理並使用它來完成可視化的效果。
  • Python實戰|8個常用的Python數據分析庫(附案例+源碼)
    8個Python中常用的數據分析工具,Python強大之處在於其第三方擴展庫較多。本文介紹數據分析方面的擴展庫分別為:NumPy、SciPy、Matplotlib、Pandas、StatsModels、Scikit-learn、Keras、Gensim,下面對這八個擴展庫進行簡單介紹,以及相關的代碼案例NumPy
  • 一行代碼加快pandas計算速度
    此GitHub頁面上提供了完整的Pandaral·lel存儲庫和文檔。使用pandas,當您運行以下行時: 得到這個CPU使用率: Pandaral·lel 的想法是將pandas計算分布在計算機上所有可用的CPU上,以顯著提高速度。
  • pandas數據可視化原來也這麼厲害
    作者:小伍哥 來源:AI入門學習(公眾號)在python中,常見的數據可視化庫有3個:matplotlib:最常用的庫,可以算作可視化的必備技能庫,比較底層,api多,學起來不太容易。seaborn:是建構於matplotlib基礎上,能滿足絕大多數可視化需求,更特殊的需求還是需要學習matplotlib。pyecharts:上面的兩個庫都是靜態的可視化庫,而pyecharts有很好的web兼容性,可以做到可視化的動態效果。並且種類也比較豐富。
  • 玩轉Pandas,讓數據處理更easy系列5
    easy系列1玩轉Pandas,讓數據處理更easy系列2玩轉Pandas,讓數據處理更easy系列3玩轉Pandas,讓數據處理更easy系列4以上4篇總結了Pandas主要的兩個數據結構:Series(一維)和DataFrame(二維),系統地介紹了創建,索引,增刪改查Series
  • Pandas萬花筒:讓繪圖變得更美觀
    圖源:tehrantimes流行 Python 數據分析庫 Pandas 中的繪圖功能一直是迅速繪製圖表的首選之一。但是,其可用的可視化效果總是十分粗略,實用有餘、美觀不足。筆者常用 Pandas 的繪圖功能快速地執行一些可視的數據探索,但在介紹數據洞察時,我會使用「更美觀」的繪圖庫(如 Plotly 或 Bokeh )來重做可視化。自最新的 Pandas 版本0.25.3發布後,無需這樣做了,現在我們可以使用第三方可視化庫作為 Pandas 繪圖功能的後端。
  • 1 行 Python 代碼幹了妹子一天的工作
    ,想著這麼強大的函數肯定有這個功能,於是我開始翻閱資料,沒想到還真找到了,而且僅用三行代碼就搞定了,驚的朋友直呼python牛批下面個大家詳細介紹一下整個過程1.正確讀取表格首先按照傳統的方式讀表格:import pandas
  • 如何通過一頓飯來說明NumPy與pandas的功用
    NumPy除了在相當程度上優化了Python計算過程,其自身還有較多的高級特性,如指定數組存儲的行優先或者列優先、廣播功能從而快速的對不同形狀的矩陣進行計算、ufunc類型的函數可以使得我們丟開循環而編寫出更為簡潔也更有效率的代碼、使用開源項目Numba編寫快速的NumPy函數,而Numba則是可以利用GPU進行運算的。
  • 那些讓人驚豔的Python庫
    falcon–一個用來建立雲API和web app後端的噶性能框架。sandman–為現存的資料庫驅動系統自動創建REST APIs。restless–框架無關的REST框架 ,基於從Tastypie學到的知識。ripozo–快速創建REST/HATEOAS/Hypermedia APIs。
  • 小白學 Python 爬蟲(21):解析庫 Beautiful Soup(上)
    小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝小白學 Python 爬蟲(7):HTTP 基礎小白學 Python 爬蟲(8):網頁基礎小白學 Python 爬蟲(9):爬蟲基礎小白學 Python 爬蟲(10):Session 和 Cookies小白學 Python 爬蟲(11):urllib 基礎使用
  • 2019 必知的 10 大頂級 python 庫
    在本文中,我們將討論一些 python 中的頂級庫,開發人員可以使用這些庫在現有的應用程式中應用、清洗和表示數據,並進行機器學習研究。然而,最重要的一點是它有大量的庫供用戶使用。python 的簡單性吸引了許多開發人員為機器學習創建新的庫。由於有大量的庫,python 在機器學習專家中變得非常流行。所以,這裡要介紹的第一個庫是 TensorFlow。
  • Python Pandas 最詳教程
    有一個用於數據科學的包絕對是必需的,它就是 pandas。pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。
  • 測試~python庫介紹(一) opencv
    從事測試工作已有4年了,期間通過python編寫了很多自動化腳本,接下來的日子和大家分享一下測試工作上常用的python庫,適合常年從事黑盒測試的同學了解一些入門級技巧
  • 太強了,1行python代碼幹了妹子一天的工作
    於是我馬上想到了pandas,想著這麼強大的函數肯定有這個功能,於是我開始翻閱資料,沒想到還真找到了,而且僅用三行代碼就搞定了,驚的朋友直呼python牛批下面個大家詳細介紹一下整個過程1.正確讀取表格首先按照傳統的方式讀表格:import pandas as pddata1 = pd.read_excel('高中生數量.xlsx')data1