Pandas 數據篩選清洗

2021-02-14 隨身雜技

刪除行列

data = pd.DataFrame(np.arange(16).reshape((4, 4)),                    index=['Ohio', 'Colorado', 'Utah', 'New York'],                    columns=['one', 'two', 'three', 'four'])data.drop(['Colorado', 'Ohio'])data.drop('two', axis=1)data.drop(['two', 'four'], axis='columns')data.drop('two', axis=1,inplace=True)

處理缺失值

Pandas中,將缺失值設置為NA,即Not Available,

dropna
根據每個標籤的值是否是缺失數據來篩選軸標籤,並根據允許丟失的數據來確定閥值
fillna
用某些值來填充缺失的數據或使用插值的方法
isnull
返回表明哪些值是缺失值的布爾值
notnull
isnull的反函數
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])string_data.isnull()        0    False        1    False        2     True        3    False        dtype: bool
from numpy import nan as NAdata = pd.Series([1, NA, 3.5, NA, 7])data.dropna() 0 1.0 2 3.5 4 7.0 dtype: float64data[data.notnull()] 0 1.0 2 3.5 4    7.0 dtype: float64data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])   df.fillna(0)  df.fillna({1: 0.5, 2: 0})        

處理重複值

duplicated
返回一個布爾值series,反應每一個行是否存在重複值drop_duplicated

兩個函數都是默認都是對行進行操作,

data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],                     'k2': [1, 1, 2, 3, 3, 4, 4]})            k1  k2        0  one  1        1  two  1        2  one  2        3  two  3        4  one  3        5  two  4        6  two  4data.duplicated()        0    False        1    False        2    False        3    False        4    False        5    False        6     True        dtype: booldata.drop_duplicates()data['v1'] = range(7)data.drop_duplicates(['k1'])          k1  k2  v1        0  one  1  0        1  two  1  1data.drop_duplicates(['k1', 'k2'], keep='last')           k1  k2  v1        0  one  1  0        1  two  1  1        2  one  2  2        3  two  3  3        4  one  3  4        6  two  4  6

pandas中的向量化字符串函數

清理雜亂的數據集用於分析通常需要大量的字符串處理和正則化,包含字符串的列有時含有缺失數據,使事情變得複雜

cat
根據可選的分隔符按元素黏合字符串

contains

返回是否含某個模式,正則表達式的布爾值數組
count模式出現的次數
extract
使用正則表達式從字符串series中分組抽籤一個或者多個字符串,返回結果是每個分組形成的一列dataframe
endswith等價於對每個元素使用x.endwith
startswith
等價於對每個元素使用startswithfindall
找出字符串中的所有模式,正則表達式的匹配項目,以列表返回
get
對每個元素進行索引
isalnum

isalpha

isdecimal

isslower

isupper

join
根據傳遞的分隔符,將series中的中的字符串聯合
len
計算每個字符串的長度
match
使用re.match將正則表達式應用到每個元素
pad
將空白加到字符串的左邊,右邊或者兩邊
center
等價於pad(slide='both')
repeat重複值(s.str.repeat(3)等價於對米格字符串進行x*3)slice
對字符串進行切片
split
以分割符或者正則表達式對字符進行拆分
strip

rstrip/lstrip

data = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com',        'Rob': 'rob@gmail.com', 'Wes': np.nan}data = pd.Series(data)data.str.contains('gmail')        Dave     False        Steve     True        Rob       True        Wes        NaN        dtype: objectimport repattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{2,4})'data.str.findall(pattern, flags=re.IGNORECASE)      Dave     [(dave, google, com)]      Steve    [(steve, gmail, com)]      Rob        [(rob, gmail, com)]      Wes                        NaN      dtype: objectdata.str.extract(pattern, flags=re.IGNORECASE)            0        1      2      Dave  dave   google  com      Steve steve  gmail   com      Rob    rob   gmail   com      Wes    NaN    NaN    NaNmatches = data.str.match(pattern, flags=re.IGNORECASE)matches      Dave     True      Steve    True      Rob      True      Wes       NaN      dtype: objectmatches.str.get(1)matches.str[0]      Dave    NaN      Steve   NaN      Rob     NaN      Wes     NaN      dtype: float64data.str[:5]      Dave     dave@      Steve    steve      Rob      rob@g      Wes        NaN      dtype: object

隨機採樣

DataFrame.take(indices, axis=0, is_copy=None, **kwargs)  [source]

沿著坐標軸返回給定位置索引中的元素。

這意味著我們沒有根據對象的索引屬性中的實際值進行索引。我們根據元素在對象中的實際位置建立索引。

參數:

indices :array-like

一個整數數組,指示要take的位置。

axis :{0 或 『index』, 1 或 『columns』, None}, 默認為 0

選擇元素的軸。0表示選擇行,1表示選擇列。

is_copy :bool

在pandas 1.0之前,

is_copy=False可以指定以確保返回值是實際副本。

從pandas 1.0開始, take始終返回一個副本,

因此不推薦使用該關鍵字。

從1.0.0版開始不推薦使用。

**kwargs

與兼容numpy.take()。對輸出沒有影響。

返回值:

taken:與調用者相同的類型

array-like ,包含從對象中獲取的元素。

>>> df = pd.DataFrame([('falcon', 'bird', 389.0),...                    ('parrot', 'bird', 24.0),...                    ('lion', 'mammal', 80.5),...                    ('monkey', 'mammal', np.nan)],...                   columns=['name', 'class', 'max_speed'],...                   index=[0, 2, 3, 1])>>> df     name   class  max_speed0  falcon    bird      389.02  parrot    bird       24.03    lion  mammal       80.51  monkey  mammal        NaN>>> df.take([0, 3])     name   class  max_speed0  falcon    bird      389.01  monkey  mammal        NaN>>> df.take([1, 2], axis=1)    class  max_speed0    bird      389.02    bird       24.03  mammal       80.51  mammal        NaN>>> df.take([-1, -2])     name   class  max_speed1  monkey  mammal        NaN3    lion  mammal       80.5

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)  [source]

從對象軸返回隨機的項目樣本。

您可以使用random_state來實現重現性

參數:

n :int, 可選

從軸返回的項目數。不能與frac一起使用。 

如果frac = None,則Default = 1。

frac :float, 可選

要返回的軸項的Fraction。不能與n一起使用。

replace:bool, 默認為 False

允許或不允許對同一行進行多次抽樣。

weights : str或ndarray-like, 可選

默認的『None』將導致相等的概率權重。

如果傳遞了一個Series,將與目標對象上的索引對齊。

權重中未被採樣對象發現的索引值將被忽略,

權重中未被採樣對象的索引值將被賦值為零。

如果在DataFrame上調用,

將在axis = 0時接受列的名稱。

除非權值是一個Series,

否則權值必須與被採樣的軸線長度相同。

如果權重的和不是1,它們將被規範化為和為1。

weights列中缺失的值將被視為零。不允許無限值。

random_state :int,array-like, 

BitGenerator, np.random.RandomState, 可選

如果int,array-like,或BitGenerator (NumPy>=1.17),

種子為隨機數生成器,如果np.random。隨機狀態,用作numpy隨機狀態對象。

在版本1.1.0中改變:array-like和BitGenerator(用於NumPy>=1.17),

對象現在作為種子傳遞給np.random.RandomState()

axis :{0 或 『index』, 1 或 『columns』, None}, 默認為 None

從軸返回的項目數。不能與frac一起使用。如果frac = None,

則Default = 1。

返回值:

Series 或 DataFrame

與調用者相同類型的新對象,

包含從調用者對象中隨機取樣的n項。

>>> df = pd.DataFrame({'num_legs': [2, 4, 8, 0],...                    'num_wings': [2, 0, 0, 0],...                    'num_specimen_seen': [10, 2, 1, 8]},...                   index=['falcon', 'dog', 'spider', 'fish'])>>> df        num_legs  num_wings  num_specimen_seenfalcon         2          2                 10dog            4          0                  2spider         8          0                  1fish           0          0                  8>>> df['num_legs'].sample(n=3, random_state=1)fish      0spider    8falcon    2Name: num_legs, dtype: int64>>> df.sample(frac=0.5, replace=True, random_state=1)      num_legs  num_wings  num_specimen_seendog          4          0                  2fish         0          0                  8>>> df.sample(frac=2, replace=True, random_state=1)        num_legs  num_wings  num_specimen_seendog            4          0                  2fish           0          0                  8falcon         2          2                 10falcon         2          2                 10fish           0          0                  8dog            4          0                  2fish           0          0                  8dog            4          0                  2>>> df.sample(n=2, weights='num_specimen_seen', random_state=1)        num_legs  num_wings  num_specimen_seenfalcon         2          2                 10fish           0          0                  8

相關焦點

  • 100 個 pandas 數據分析函數總結
    (點擊上方快速關注並設置為星標,一起學Python)來源:數據分析1480
  • 盤點Pandas 的100個常用函數
    作者 | 劉順祥 來源 | 數據分析1480 這一期將分享我認為比較常規的100個實用函數,這些函數大致可以分為六類,分別是統計匯總函數、數據清洗函數、數據篩選、繪圖與元素級運算函數、時間序列函數和其他函數。
  • Python 數據分析:Pandas 進階
    概述我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹,本文我們進一步來學習 Pandas 的一些使用。2. 缺失項在現實中我們獲取到的數據有時會存在缺失項問題,對於這樣的數據,我們通常需要做一些基本處理,下面我們通過示例來看一下。
  • 數據科學 | 從 Pandas 小白到 Pandas 能手
    在本文中,作者從 Pandas 的簡介開始,一步一步講解了 Pandas 的發展現狀、內存優化等問題。這是一篇最佳實踐教程,既適合用過 Pandas 的讀者,也適合沒用過但想要上手的小白。通過本文,你將有望發現一到多種用 pandas 編碼的新方法。Pandas 發展現狀;內存優化;索引;方法鏈;隨機提示。
  • Python 數據處理庫 pandas 進階教程
    下面是一個代碼示例:# select_data.py import pandas as pdimport numpy as np series1 = pd.Series([1, 2, 3, 4, 5, 6, 7],    index=["C", "D", "E", "F", "G", "A", "B"]
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • 通過 SQL 查詢學習 Pandas 數據處理
    ://shzhangji.com/cnblogs/2017/07/23/learn-pandas-from-a-sql-perspective/Pandas 是一款廣泛使用的數據處理工具。結合 NumPy 和 Matplotlib 類庫,我們可以在內存中進行高性能的數據清洗、轉換、分析及可視化工作。雖然 Python 本身是一門非常容易學習的語言,但要熟練掌握 Pandas 豐富的 API 接口及正確的使用方式,還是需要投入一定時間的。對於數據開發工程師或分析師而言,SQL 語言是標準的數據查詢工具。
  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那麼不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。標準循環數據幀是具有行和列的 pandas 對象。
  • 國外大神製作的超棒 Pandas 可視化教程
    、機器學習、或者用 Python 做數據科學的研究,你會經常接觸到 Pandas 庫。比如,我們想得到第 1, 2, 3 行的 Artist 列數據。import pandas as pddf.loc[1:3, ['Artist']]# loc(這裡會包含兩個邊界的行號所在的值)
  • 用 Pandas 讀寫網頁中的 HTML 表格數據
    我們可以使用HTML的<table>標籤來呈現表格數據。Pandas 數據分析庫提供了read_html()和to_html()之類的功能,因此我們可以將數據導入和導出到DataFrames。在本文中,我們將學習如何從HTML文件讀取表格數據並將其加載到Pandas DataFrame中。我們還將學習如何將數據從Pandas DataFrame寫入HTML文件。
  • Pandas 數據處理 | Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date
  • 這是 Pandas 最詳細教程了
    有一個用於數據科學的包絕對是必需的,它就是 pandas。pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。
  • Datawhale組隊學習-pandas task08 文本數據
    在Python標準庫中也有 str 模塊,為了使用上的便利,有許多函數的用法 pandas 照搬了它的設計,例如字母轉為大寫的操作:var = 'abcd'str.upper(var) # Python內置str模塊s = pd.Series(['abcd','efg'
  • 史上最全Pandas 教程!
    有一個用於數據科學的包絕對是必需的,它就是 pandas。pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。如果你早已熟知 python 的使用,可以直接跳到第三段。
  • Python 數據處理庫 pandas 入門教程
    關於如何獲取pandas請參閱官網上的說明:pandas Installation。Series由於Series是一維結構的數據,我們可以直接通過數組來創建這種數據,像這樣:# data_structure.py import pandas as pdimport numpy as np series1 = pd.Series([1, 2, 3, 4])print("series1
  • 懂Excel就能輕鬆入門pandas(一):篩選功能
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas 。Excel 自帶篩選功能,可以對表格中進行各種條件篩選。今天我們就用 pandas 看看怎麼做到 Excel 的篩選功能,並且看看 Excel 也做不到的功能。
  • 【pandas 基礎】
    構建的含有更高級數據結構和工具的數據分析包類似於 Numpy 的核心是 ndarray,pandas 也是圍繞著 Series 和 DataFrame 兩個核心數據結構展開的 。pandas 約定俗成的導入方法如下:lang:pythonfrom pandas import Series,DataFrameimport pandas as pd<br />SeriesSeries 可以看做一個定長的有序字典。
  • 數據分析利器 pandas 系列教程(二):強大的 DataFrame
    在上一篇文章 數據分析利器 pandas 系列教程(一):從 Series 說起  中:詳細介紹了 pandas 基礎數據結構 Series,今天說說另一種數據結構 DataFrame。通過列創建import pandas as pd#沒有設置行索引 index,取默認值df = pd.DataFrame({'name':['Bob','Alice','Joe']*3,               'sex':['male','female','male']*3,               'course':['math','english
  • 如何使用 Pandas 讀寫Excel
    Pandas是一個基於Numpy專業的數據結構化分析工具,可用於數據挖掘和數據分析,同時也提供數據清洗功能。其中的數據框格式將非常有利於我們對Excel表格的處理,相關介紹可以點擊上一篇內容。今天的推送主要內容圍繞讀取表格及一些參數使用,同時也徵集一下大家的使用經驗,歡迎留言。
  • 一日二技:Pandas 與 Docker 的使用技巧
    pandas 讀取無頭 CSV我們知道,CSV 一般是長這樣的: