Pandas數(shù)據(jù)清洗函數(shù)總結(jié)
一、drop():刪除指定行列
drop()函數(shù)用于刪除指定行,指定列,同時可以刪除多行多列
語法格式:
DataFrame.drop( self, labels=None, axis: Axis = 0, index=None, columns=None, level: Level | None = None, inplace: bool = False, errors: str = "raise", )
參數(shù)說明:
- labels:要刪除的行列的名字,接收列表參數(shù),列表內(nèi)有多個參數(shù)時表示刪除多行或者多列
- axis:要刪除的軸,與labels參數(shù)配合使用。默認為0,指刪除行;axis=1,刪除列
- index:直接指定要刪除的行
- columns:直接指定要刪除的列
- inplace:是否直接在原數(shù)據(jù)上進行刪除操作,默認為False(刪除操作不改變原數(shù)據(jù)),而是返回一個執(zhí)行刪除操作后的新dataframe;inplace=True,直接在原數(shù)據(jù)上修改。
1. 刪除指定行
當(dāng) axis=0 時,刪除指定行
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, 4, 5, 5, 5]},index=list('abcdefgh')) print(df_obj) # 刪除第一行 df_obj.drop(labels='a', axis=0, inplace=True) print(df_obj)
運行結(jié)果:
2. 刪除指定列
當(dāng) axis=1 時,刪除指定列
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh')) print(df_obj) # 刪除data2 df_obj.drop(labels='data2', axis=1, inplace=True) print(df_obj)
運行結(jié)果:
二、del():刪除指定列
del()函數(shù)與drop()函數(shù)相比就沒有那么靈活了,此操作會對原數(shù)據(jù)df進行刪除,且一次只能刪除一列。
語法格式:
del df[‘列名']
案例:
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh')) print(df_obj) # 刪除data1 del df_obj['data1'] print(df_obj)
運行結(jié)果:
三、isnull():判斷是否為缺失
判斷序列元素是否為缺失(返回與序列長度一樣的bool值)
1. 判斷是否為缺失
示例代碼:
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'b', 'b', 'c'], 'data2': [1, 2, 3, 4, 5], 'data3': np.NaN}) print(df_obj) print(df_obj.isnull())
運行結(jié)果:
2. 判斷哪些列存在缺失
isnull().any()
會判斷哪些”列”存在缺失值,數(shù)據(jù)清洗中經(jīng)常用的小技巧
print(df_obj.isnull().any())
運行結(jié)果:
3. 統(tǒng)計缺失個數(shù)
isnull().sum()
統(tǒng)計每一列的缺失個數(shù)
print(df_obj.isnull().sum())
運行結(jié)果:
四、notnull():判斷是否不為缺失
判斷序列元素是否不為缺失(返回與序列長度一樣的bool值),用法與isnull()相似
print(df_obj.notnull())
運行結(jié)果:
五、dropna():刪除缺失值
dropna()函數(shù)可以刪除缺失值
語法格式:
DataFrame.dropna( self, axis: Axis = 0, how: str = "any", thresh=None, subset=None, inplace: bool = False, )
參數(shù)說明:
- axis:移除行或列,默認為0,即行含有空值移除行
- how:‘all’所有值為空移除,'any’默認值,包含空值移除
- thresh:包含thresh個空值時移除
- subset:axis軸上,指定需要處理的標簽名稱列表
- inplace:是否替換原始數(shù)據(jù),默認False
1. 導(dǎo)入數(shù)據(jù)
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'], 'data2': [1, 2, np.NaN, 4, 5], 'data3': np.NaN, 'data4': [1, 2, 3, 4, 5]}) print(df_obj)
運行結(jié)果:
2. 刪除含有NaN值的所有行
默認 axis=0
print(df_obj.dropna())
運行結(jié)果:
3. 刪除含有NaN值的所有列
設(shè)置
axis=1
刪除列
print(df_obj.dropna(axis=1))
運行結(jié)果:
4. 刪除元素都是NaN值的行
設(shè)置參數(shù)
how="all"
,只有行一整行數(shù)據(jù)都是NaN的時候才會刪除
print(df_obj.dropna(axis=0,how="all"))
運行結(jié)果:由于所有行都有至少有一個有效值,所有都沒刪除
5. 刪除元素都是NaN值的列
print(df_obj.dropna(axis=1,how="all"))
運行結(jié)果:
6. 刪除指定列中含有缺失的行
subset參數(shù)設(shè)置指定列
# 刪除data1列有含有缺失的行 print(df_obj.dropna(subset=["data1"], axis=0))
運行結(jié)果:
六. fillna():缺失值填充
缺失值填充
語法格式:
fillna( self, value: object | ArrayLike | None = None, method: FillnaOptions | None = None, axis: Axis | None = None, inplace: bool = False, limit=None, downcast=None, ) -> DataFrame | None
參數(shù)說明:
- value:用于填充的空值的值。
- method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定義了填充空值的方法, pad / ffill表示用前面行/列的值,填充當(dāng)前行/列的空值, backfill / bfill表示用后面行/列的值,填充當(dāng)前行/列的空值。
- axis:選擇軸,默認0(行),axis=1:列
- inplace:是否替換原始數(shù)據(jù)
- limit:int, default None。如果method被指定,對于連續(xù)的空值,這段連續(xù)區(qū)域,最多填充前 limit 個空值(如果存在多段連續(xù)區(qū)域,每段最多填充前 limit 個空值)。如果method未被指定, 在該axis下,最多填充前 limit 個空值(不論空值連續(xù)區(qū)間是否間斷)
- downcast:dict, default is None,字典中的項為,為類型向下轉(zhuǎn)換規(guī)則。或者為字符串“infer”,此時會在合適的等價類型之間進行向下轉(zhuǎn)換,比如float64 to int64 if possible。
1. 導(dǎo)入數(shù)據(jù)
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'], 'data2': [1, 2, np.NaN, 4, 5], 'data3': np.NaN, 'data4': [1, 2, 3, 4, 5]}) print(df_obj)
運行結(jié)果:
2. 默認全部填充
# 用0填補空值 print(df_obj.fillna(value=0))
運行結(jié)果:
3. 用前一行的值填補空值
設(shè)置參數(shù)
method='pad'
用前一行的值填補空值
# 用前一行填充 print(df_obj.fillna(method='pad',axis=0))
運行結(jié)果:
4. 用后一列的值填補空值
設(shè)置參數(shù)
method='backfill'
# 用后一列的值填補空值 print(df_obj.fillna(method='backfill', axis=1))
運行結(jié)果:
5. 設(shè)置填充個數(shù)
limit=數(shù)字,設(shè)置填充個數(shù)
# 用后一列的值填補空值,只填充兩個 print(df_obj.fillna(method='backfill', axis=1, limit=2))
運行結(jié)果:
七、ffill():用前一個元素填充
前向后填充缺失值,用缺失值的前一個元素填充,與fillna()相比沒有那么多可選性
語法格式:
ffill( self: DataFrame, axis: None | Axis = None, inplace: bool = False, limit: None | int = None, downcast=None, ) -> DataFrame | None
案例說明:
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]}) print(df_obj) print(df_obj.ffill())
運行結(jié)果:
八、bfill():用后一個元素填充
后向填充缺失值,用缺失值的后一個元素填充
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]}) print(df_obj) print(df_obj.bfill())
九、duplicated():判斷序列元素是否重復(fù)
判斷序列元素是否重復(fù)
語法格式:
DataFrame.duplicated(subset=None,keep='first')
參數(shù)說明:
- subset:列標簽,可選, 默認使用所有列,只考慮某些列來識別重復(fù)項傳入列標簽或者列標簽的序列
- keep:{‘first’,‘last’,F(xiàn)alse},默認’first’
- first:刪除第一次出現(xiàn)的重復(fù)項。
- last:刪除重復(fù)項,除了最后一次出現(xiàn)。
- false:刪除所有重復(fù)項
返回布爾型Series表示每行是否為重復(fù)行
示例代碼:
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, 4, 5, 5, 5]}) print(df_obj) print(df_obj.duplicated())
運行結(jié)果:
十、drop_duplicates():刪除重復(fù)行
刪除重復(fù)行,默認判斷全部列,可指定按某些列判斷
語法格式:
DataFrame.drop_duplicates( self, subset: Hashable | Sequence[Hashable] | None = None, keep: Literal["first"] | Literal["last"] | Literal[False] = "first", inplace: bool = False, ignore_index: bool = False, ) -> DataFrame | None
參數(shù)說明:
- subset:列標簽,可選, 默認使用所有列,只考慮某些列來識別重復(fù)項傳入列標簽或者列標簽的序列
- keep:{‘first’,‘last’,F(xiàn)alse},默認’first’
- first:刪除第一次出現(xiàn)的重復(fù)項。
- last:刪除重復(fù)項,除了最后一次出現(xiàn)。
- false:刪除所有重復(fù)項
- inplace:是否替換原數(shù)據(jù),默認是False,生成新的對象,可以復(fù)制到新的DataFrame
- ignore_index:bool,默認為False,如果為True,則生成的軸將標記為0,1,…,n-1。
1. 判斷所有列
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, 4, 5, 5, 5]}) print(df_obj) print(df_obj.drop_duplicates())
運行結(jié)果:
2. 按照指定列進行判斷
print(df_obj.drop_duplicates('data2'))
運行結(jié)果:
十一、replace():替換元素
替換元素,可以使用正則表達式
語法格式:
replace( self, to_replace=None, value=None, inplace: bool = False, limit=None, regex: bool = False, method: str = "pad", )
參數(shù)說明:
- to_replace: 需要替換的值
- value:替換后的值
- inplace: 是否在原數(shù)據(jù)表上更改,默認 inplace=False
- limit:向前或向后填充的最大尺寸間隙,用于填充缺失值
- regex: 是否模糊查詢,用于正則表達式查找,默認 regex=False
- method: 填充方式,用于填充缺失值
- pad: 向前填充
- ffill: 向前填充
- bfill: 向后填充
1. 單個值替換
to_replace接收字符串
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]}) print(df_obj) print(df_obj.replace('a',"A"))
運行結(jié)果:
2. 多個值替換一個值
to_replace接收列表
print(df_obj.replace([1, 2], -100))
運行結(jié)果:
3. 多個值替換多個值
to_replace接收列表,value接收列表
print(df_obj.replace([1, 2], [-100, -200]))
運行結(jié)果:
4. 使用正則表達式:
to_replace接收正則語法,設(shè)置 regex=True
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1': ['ab', 'abc', 'aaa', 'b', 'b', 'b', 'c', 'c'], 'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]}) print(df_obj) # 替換a開頭的 print(df_obj.replace('a.?',"A",regex=True))
運行結(jié)果:
十二、str.replace():替換元素
替換元素,可使用正則表達式
import numpy as np import pandas as pd s = pd.Series(['foo', 'fuz', np.nan]) print(s) print(s.str.replace('f.', 'ba', regex=True))
運行結(jié)果:
十三、str.split.str():分割元素
以指定字符切割列
import numpy as np import pandas as pd data = {'洗漱用品':['毛巾|牙刷|牙膏']} df = pd.DataFrame(data) print(df) print(df['洗漱用品'].str.split('|',expand=True))
運行結(jié)果:
到此這篇關(guān)于Pandas數(shù)據(jù)清洗函數(shù)總結(jié)的文章就介紹到這了,更多相關(guān)pandas數(shù)據(jù)清洗 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解
- 利用pandas進行數(shù)據(jù)清洗的方法
- pandas數(shù)據(jù)清洗實現(xiàn)刪除的項目實踐
- Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解
- Pandas數(shù)據(jù)清洗的實現(xiàn)
- 利用pandas進行數(shù)據(jù)清洗的7種方式
- 基于pandas數(shù)據(jù)清洗的實現(xiàn)示例
- Pandas數(shù)據(jù)清洗與過濾空值技巧
- Pandas數(shù)據(jù)清洗的維度詳解
- Pandas 數(shù)據(jù)清洗的具體使用
相關(guān)文章
基礎(chǔ)的十進制按位運算總結(jié)與在Python中的計算示例
按位運算是計算機學(xué)習(xí)中的基礎(chǔ),Python完全支持位運算符從而幾乎可以直接顯示出位運算的結(jié)果,這里我們稍微總結(jié)一下基礎(chǔ)的十進制按位運算總結(jié)與在Python中的計算示例2016-06-06PyTorch解決ModuleNotFoundError: No module named
本文主要介紹了PyTorch解決ModuleNotFoundError: No module named ‘torch’,這個錯誤意味著我們的Python環(huán)境中沒有安裝PyTorch庫,無法正常使用其功能,下面就來具體介紹一下2024-03-03Python實現(xiàn)將不規(guī)范的英文名字首字母大寫
這篇文章給大家主要介紹的是利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮?,其他小寫的?guī)范名字。文中給出了三種解決方法,大家可以根據(jù)需要選擇使用,感興趣的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11python 密碼學(xué)示例——理解哈希(Hash)算法
這篇文章主要介紹了哈希(Hash)算法的相關(guān)資料,幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下2020-09-09Python基于jieba分詞實現(xiàn)snownlp情感分析
情感分析(sentiment analysis)是2018年公布的計算機科學(xué)技術(shù)名詞,它可以根據(jù)文本內(nèi)容判斷出所代表的含義是積極的還是負面的等。本文將通過jieba分詞實現(xiàn)snownlp情感分析,感興趣的可以了解一下2023-01-01