超全的pandas數據分析常用函數總結:上篇

2021-03-02 Python愛好者社區


大家好,我是雅痞紳士JM


基礎知識在數據分析中就像是九陽神功,熟練的掌握,加以運用,就可以練就深厚的內力,成為絕頂高手自然不在話下!


為了更好地學習數據分析,我對於數據分析中pandas這一模塊裡面常用的函數進行了總結。整篇總結,在詳盡且通俗易懂的基礎上,我力求使其有很強的條理性和邏輯性,所以製作了思維導圖,對於每一個值得深究的函數用法,我也會附上官方連結,方便大家繼續深入學習。


文章中的所有代碼都會有講解和注釋,絕大部分也都會配有運行結果,這樣的話,整篇總結篇幅量自然不小,所以我分成了上下兩篇,這裡是上篇,下篇在次條。

import pandas as pd      # 這裡用到的是pandas和numpy兩個模塊
import numpy as np



2.1 創建數據集


我構造了一個超市購物的數據集,該數據集屬性包括:訂單ID號(id)、訂單日期(date)、消費金額(money)、訂單商品(product)、商品類別(department)、商品產地(origin)。


# 列表和字典均可傳入DataFrame,我這裡用的是字典傳入:
data=pd.DataFrame({
"id":np.arange(101,111), # np.arange會自動輸出範圍內的數據,這裡會輸出101~110的id號。
"date":pd.date_range(start="20200310",periods=10), # 輸出日期數據,設置周期為10,注意這裡的周期數應該與數據條數相等。
"money":[5,4,65,-10,15,20,35,16,6,20], # 設置一個-10的坑,下面會填(好慘,自己給自己挖坑,幸虧不準備跳~)
"product":['蘇打水','可樂','牛肉乾','老乾媽','菠蘿','冰激凌','洗面奶','洋蔥','牙膏','薯片'],
"department":['飲料','飲料','零食','調味品','水果',np.nan,'日用品','蔬菜','日用品','零食'], # 再設置一個空值的坑
"origin":['China',' China','America','China','Thailand','China','america','China','China','Japan'] # 再再設置一個america的坑
})
data # 輸出查看數據集


輸出結果:


2.2 數據寫入和讀取


data.to_csv("shopping.csv",index=False)       # index=False表示不加索引,否則會多一行索引

data=pd.read_csv("shopping.csv")



3.1 數據集基礎信息查詢


data.shape            # 行數列數
data.dtypes # 所有列的數據類型
data['id'].dtype # 某一列的數據類型
data.ndim # 數據維度
data.index # 行索引
data.columns # 列索引
data.values # 對象值


3.2 數據集整體情況查詢


data.head()    # 顯示頭部幾行(默認5行)
data.tail() # 顯示末尾幾行(默認5行)
data.info() # 數據集相關信息概覽:索引情況、列數據類型、非空值、內存使用情況
data.describe() # 快速綜合統計結果



4.1 查看異常值


當然,現在這個數據集很小,可以直觀地發現異常值,但是在數據集很大的時候,我用下面這種方式查看數據集中是否存在異常值,如果有其他更好的方法,歡迎傳授給我。


for i in data:
print(i+": "+str(data[i].unique())) # 查看某一列的唯一值


輸出結果:我們發現,該數據集中money存在一個負值,department存在一個空值以及origin存在大小寫問題。


4.2 空值處理


4.2.1 空值檢測


data.isnull()# 查看整個數據集的空值data['department'].isnull()# 查看某一列的空值


data.isnull()                # 查看整個數據集的空值
data['department'].isnull() # 查看某一列的空值


輸出結果:


將空值判斷進行匯總,更加直觀,ascending默認為True,升序。


data.isnull().sum().sort_values(ascending=False)


輸出結果:


更多關於pandas.DataFrame.sort_values的用法,戳下面官方連結:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html



4.2.2 空值處理


pandas.DataFrame.fillna(value = None,method = None,inplace = False)

value:用於填充的值,可以是具體值、字典和數組,不能是列表;

method:填充方法,有 ffill 和 bfill 等;

inplace默認無False,如果為True,則將修改此對象上的所有其他視圖。

更多關於pandas.DataFrame.fillna的用法,戳下面官方連結:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html


data['department'].fillna(method="ffill")    # 填充上一個值,即填充「水果」


輸出結果:


data['department'].fillna(method="bfill")    # 填充下一個值,即填充「日用品」


data['department'].fillna(value="冷凍食品",inplace=True)    # 替換為具體值,並且在原對象值上進行修改


輸出結果:


4.3 空格處理


只針對object類型數據


for i in data:                                    # 遍歷數據集中的每一列
if pd.api.types.is_object_dtype(data[i]): # 如果是object類型的數據,則執行下方代碼
data[i]=data[i].str.strip() # 去除空格
data['origin'].unique() # 驗證一下


輸出結果:array([『China』, 『America』, 『Thailand』, 『america』, 『Japan』], dtype=object)


4.4 大小寫轉換


data['origin'].str.title()         # 將首字母大寫
data['origin'].str.capitalize() # 將首字母大寫
data['origin'].str.upper() # 全部大寫
data['origin'].str.lower() # 全部小寫


4.5 數據替換


data['origin'].replace("america","America",inplace=True)    # 將第一個值替換為第二個值,inplace默認為False
data['origin']


輸出結果:


data['money'].replace(-10,np.nan,inplace=True)                    # 將負值替換為空值
data['money'].replace(np.nan,data['money'].mean(),inplace=True) # 將空值替換為均值
data['money']


輸出結果:


4.6 數據刪除


方法一


data1 = data[data.origin != 'American'] #去掉origin為American的行
data1
data2=data[(data != 'Japan').all(1)] #去掉所有包含Japan的行 不等於Japan的行為真,則返回
data2


方法二


data['origin'].drop_duplicates()      # 默認刪除後面出現的重複值,即保留第一次出現的重複值


輸出結果:


data['origin'].drop_duplicates(keep='last')   # 刪除前面出現的重複值,即保留最後一次出現的重複值


輸出結果:


更多關於pandas.DataFrame.drop_duplicates的用法,戳下面官方連結:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html#pandas.DataFrame.drop_duplicates


4.7 數據格式轉換


data['id'].astype('str')    # 將id列的類型轉換為字符串類型。


常見的數據類型對照



4.8 更改列名稱


data.rename(columns={'id':'ID', 'origin':'產地'})     # 將id列改為ID,將origin改為產地。


輸出結果:





參考資料: 

pandas官網

pandas用法總結

Pandas 文本數據方法


重磅!Python交流已成立

為了給小夥伴們提供一個互相交流的技術平臺,特地開通了Python交流群。群裡有不少技術大神,不時會分享一些技術要點,更有一些資源收藏愛好者不時分享一些優質的學習資料。(免費,不賣課!)

需要進群的朋友,可長按掃描下方二維碼。


▲長按掃碼

相關焦點

  • 超全的pandas數據分析常用函數總結:下篇
    為了更好地學習數據分析,我對於數據分析中pandas這一模塊裡面常用的函數進行了總結。整篇總結,在詳盡且通俗易懂的基礎上,我力求使其有很強的條理性和邏輯性,所以製作了思維導圖,對於每一個值得深究的函數用法,我也會附上官方連結,方便大家繼續深入學習。
  • 超全的pandas數據分析常用函數總結(上篇)
    來源 | 凹凸數據為了更好地學習數據分析,我對於數據分析中pandas這一模塊裡面常用的函數進行了總結。整篇總結,在詳盡且通俗易懂的基礎上,我力求使其有很強的條理性和邏輯性,所以製作了思維導圖,希望能夠幫助到大家深入了解與學習相關函數的知識點。
  • 超全的pandas數據分析常用函數總結(下篇)
    上篇文章中,小編給大家總結了數據分析中pandas這一模塊裡面常用函數的四個部分的內容,分別為導入模塊、創建數據集並讀取、數據查看與數據清洗,現在給大家介紹下篇的內容。來源 | 凹凸數據5.數據提取下面這部分會比較繞:loc函數按標籤值進行提取,iloc按位置進行提取pandas.DataFrame.loc() 允許輸入的值:單個標籤,例如5或』a』,(請注意,5被解釋為索引的標籤,而不是沿索引的整數位置)。
  • 數據分析之Pandas變形操作總結
    Pandas中提供了各種選項,下面介紹常用參數:① aggfunc:對組內進行聚合統計,可傳入各類函數,默認為'mean'pd.pivot_table(df,index='School'highlight=stack#pandas.DataFrame.stack2). unstack:stack的逆函數,功能上類似於pivot_table。表達式:DataFrame.unstack(self,level = -1,fill_value = None)
  • 數據分析之Pandas
    Pandas 納入了大量庫和一些標準的數據模型,pandas提供了大量能使我們快速便捷地處理數據的函數和方法。所以下面首先介紹pandas最常用的2種基本數據格式[1],然後說明如何從文件中導入數據[2],最後總結了一些最常用的函數[3]。因為pandas有一些迷惑的用法,即使我這種常用的老玩家,曾經一度也有很多使用上的困惑,這裡也將一起手撕。
  • 數據分析之Pandas合併操作總結
    highlight=combine#pandas.DataFrame.combine(3)combine_first方法這個方法作用是用df2填補df1的缺失值,功能比較簡單,但很多時候會比combine更常用,下面舉兩個例子:df1 = pd.DataFrame({'A': [None, 0],
  • Python學習指南| 快速入門Pandas數據分析技巧
    它能完成許多任務,為數據分析提供了廣泛的手段。包括:雖然pandas功能非常強大,但它不能為整個數據科學管道pipeline提供函數。學習在實際數據分析過程中使用pandas兩者之間的區別就像學習如何將一些小枝分成兩半,而不是去森林和砍倒一些樹木。 在詳細討論之前,我們總結這兩種方法。學習獨立於數據分析的pandas library:這種方法主要涉及閱讀,更重要的是探索官方pandas文獻。
  • 十分鐘學習pandas! pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具
  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • 數據處理技巧 | 帶你了解Pandas.groupby() 常用數據處理方法
    今天我們繼續推出一篇數據處理常用的操作技能匯總:靈活使用pandas.groupby()函數,實現數據的高效率處理,主要內容如下:pandas.groupby()三大主要操作介紹說到使用Python進行數據處理分析,那就不得不提其優秀的數據分析庫-Pandas,
  • pandas讀取表格後的常用數據處理操作
    pandas讀取表格後的一些常用數據處理操作。這篇文章其實來源於自己的數據挖掘課程作業,通過完成老師布置的作業,感覺對於使用python中的pandas模塊讀取表格數據進行操作有了更深層的認識,這裡做一個整理總結。
  • 一場pandas與SQL的巔峰大戰(二)
    上一篇文章一場pandas與SQL的巔峰大戰中,我們對比了pandas與SQL常見的一些操作,我們的例子雖然是以MySQL為基礎的,但換作其他的資料庫軟體,也一樣適用。工作中除了MySQL,也經常會使用Hive SQL,相比之下,後者有更為強大和豐富的函數。本文將延續上一篇文章的風格和思路,繼續對比Pandas與SQL,一方面是對上文的補充,另一方面也繼續深入學習一下兩種工具。
  • Python數據分析之pandas數據讀寫
    本節將學習pandas從多種存儲媒介(比如文件和資料庫)讀取數據的工具,還將學到直接將不同的數據結構寫入不同格式文件的方法,而無需過多考慮所使用的技術。本節的主要內容為pandas的多種I/O API函數,它們為大多數常用格式的數據作為DataFrame對象進行讀寫提供了很大便利。
  • 整理了25個Pandas數據分析的實用技巧
    /blob/master/top_25_pandas_tricks.ipynbpandas是Python的一個數據分析庫,提供如DataFrame等十分容易操作的數據結構,是近年做數據分析時不可或缺的工具之一。
  • 數據分析工具篇——pandas高效函數
    接上篇文章,我們把pandas的常用方法做深一步分解,上文我們主要描述了類SQL的查詢功能,本文我們來了解一下剩下的刪、改操作和一些高效的函數
  • python時間序列分析之_用pandas中的rolling函數計算時間窗口數據
    上篇文章中,我們講解了如何對時間數據進行重採樣及重採樣中降採樣和升採樣的概覽和使用方法,通過重採樣我們可以得到任何想要頻率的數據,但是這些數據也是一個時點的數據,那麼就存在這樣一個問題:時點的數據波動較大,某一點的數據不能很好的表現它本身的特性,於是我們就想,能否用一個區間的的數據去表現呢,這樣數據的準確性是不是更好一些呢?
  • 《pandas數據讀取》
    今天呢就給大家分享一個數據分析裡面的基礎內容之pandas數據讀取 數據讀取是進行數據預處理,建模與分析的前提,不同的數據源
  • pandas操作excel全總結
    pandas是基於Numpy創建的Python包,內置了大量標準函數,能夠高效地解決數據分析數據處理和分析任務,pandas支持多種文件的操作,比如Excel,csv,json,txt 文件等,讀取文件之後,就可以對數據進行各種清洗、分析操作了。
  • Pandas的函數應用及映射方法
    運用的函數可以是numpy中的函數,也可以是匿名函數或自定義的函數。· 直接使用numpy的函數# 根據指定函數進行一一映射<<< se=pd.Series({'a':-1,'b':2,'c':-3,'d':4})<<< sea -1b 2c -3d 4dtype: int64# 直接使用numpy的函數,不常用 <<< se.map
  • python數據分析之pandas常用命令整理
    pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。導入pandas庫:import pandas as pd導入Series, DataFrame:from pandas import Series, DataFramepandas常用命令讀取excel文件:df=pd.read_excel(fpath,sheet_name=name,usecols=