亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pandas 數據清洗的具體使用

 更新時間:2025年02月13日 09:14:41   作者:游王子og  
很多數據集存在數據缺失、數據格式錯誤、錯誤數據或重復數據的情況,本文主要介紹了Pandas 數據清洗的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

數據清洗是對一些沒有用的數據進行處理的過程。很多數據集存在數據缺失、數據格式錯誤、錯誤數據或重復數據的情況,如果要使數據分析更加準確,就需要對這些沒有用的數據進行處理。數據清洗與預處理的常見步驟:

  • 缺失值處理:識別并填補缺失值,或刪除含缺失值的行/列。
  • 重復數據處理:檢查并刪除重復數據,確保每條數據唯一。
  • 異常值處理:識別并處理異常值,如極端值、錯誤值。
  • 數據格式轉換:轉換數據類型或進行單位轉換,如日期格式轉換。
  • 標準化與歸一化:對數值型數據進行標準化(如 Z-score)或歸一化(如 Min-Max)。
  • 類別數據編碼:將類別變量轉換為數值形式,常見方法包括 One-Hot 編碼和標簽編碼。
  • 文本處理:對文本數據進行清洗,如去除停用詞、詞干化、分詞等。
  • 數據抽樣:從數據集中抽取樣本,或通過過采樣/欠采樣處理類別不平衡。
  • 特征工程:創(chuàng)建新特征、刪除不相關特征、選擇重要特征等。

本文使用到的測試數據 property-data.csv 如下:

上表包含了四種空數據:

  • n/a
  • NA
  • na

1 Pandas 清洗空值

如果我們要刪除包含空字段的行,可以使用 dropna() 方法,語法格式如下:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
  • axis:默認為 0,表示逢空值剔除整行,如果設置參數 axis=1 表示逢空值去掉整列。
  • how:默認為 'any' 如果一行(或一列)里任何一個數據有出現(xiàn) NA 就去掉整行,如果設置 how='all' 一行(或列)都是 NA 才去掉這整行。
  • thresh:設置需要多少非空值的數據才可以保留下來的。
  • subset:設置想要檢查的列。如果是多個列,可以使用列名的 list 作為參數。
  • inplace:如果設置 True,將計算得到的值直接覆蓋之前的值并返回 None,修改的是源數據。

1.1  isnull() 判斷各個單元格是否為空

我們可以通過 isnull() 判斷各個單元格是否為空。

import pandas as pd

df = pd.read_csv('property-data.csv')

print(df['NUM_BEDROOMS'])
print(df['NUM_BEDROOMS'].isnull())

以上例子中我們看到 Pandas 沒有把 n/a 和 NA 當作空數據,不符合我們要求,我們可以指定空數據類型:

import pandas as pd

missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values=missing_values)

print(df['NUM_BEDROOMS'])
print(df['NUM_BEDROOMS'].isnull())

1.2 dropna() 刪除包含空數據的行

接下來的實例演示了刪除包含空數據的行。

import pandas as pd

df = pd.read_csv('property-data.csv')

new_df = df.dropna()

print(new_df.to_string())

默認情況下,dropna() 方法返回一個新的 DataFrame,不會修改源數據。如果你要修改源數據 DataFrame, 可以使用 inplace = True 參數:

df.dropna(inplace = True)

我們也可以移除指定列有空值的行:

import pandas as pd

df = pd.read_csv('property-data.csv')

df.dropna(subset=['ST_NUM'], inplace=True)

print(df.to_string())

1.3  fillna() 替換空字段

我們也可以 fillna() 方法來替換一些空字段:

import pandas as pd

df = pd.read_csv('property-data.csv')

df.fillna(12345, inplace=True)

print(df.to_string())

我們也可以指定某一個列來替換數據,例如使用 12345 替換 PID 為空數據:

df.fillna({ 'PID' : 12345 }, inplace = True)

替換空單元格的常用方法是計算列的均值、中位數值或眾數。Pandas使用 mean()、median() 和 mode() 方法計算列的均值(所有值加起來的平均值)、中位數值(排序后排在中間的數)和眾數(出現(xiàn)頻率最高的數)。

1.3.1 mean() 均值替換

import pandas as pd

df = pd.read_csv('property-data.csv')

x = df["ST_NUM"].mean()
df.fillna({ 'ST_NUM': x }, inplace=True)
print(df.to_string())

以上實例輸出結果如下,紅框為計算的中位數替換來空單元格: 

1.3.2 median() 中位數替換

import pandas as pd

df = pd.read_csv('property-data.csv')
x = df["ST_NUM"].median()
df.fillna({'ST_NUM': x}, inplace=True)
print(df.to_string())

1.3.3 mode() 眾數替換

import pandas as pd

df = pd.read_csv('property-data.csv')

x = df["ST_NUM"].mode()
df.fillna({'ST_NUM': x.values[0]}, inplace=True)
print(df.to_string())

mode()可能會出現(xiàn)多個值,所以需要用values[index]指定。

2 Pandas 清洗格式錯誤數據

數據格式錯誤的單元格會使數據分析變得困難,甚至不可能。我們可以通過包含空單元格的行,或者將列中的所有單元格轉換為相同格式的數據。以下實例會格式化日期:

import pandas as pd

# 第三個日期格式錯誤
data = {
    "Date": ['2020/12/01', '2020/12/02', '20201226'],
    "duration": [50, 40, 45]
}

df = pd.DataFrame(data, index=["day1", "day2", "day3"])

df['Date'] = pd.to_datetime(df['Date'], format='mixed')

print(df.to_string())

3 Pandas 清洗錯誤數據

數據錯誤也是很常見的情況,我們可以對錯誤的數據進行替換或移除。以下實例會替換錯誤年齡的數據:

import pandas as pd

person = {
    "name": ['Google', 'Bing', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年齡數據是錯誤的
}

df = pd.DataFrame(person)

df.loc[2, 'age'] = 30  # 修改數據

print(df.to_string())

也可以設置條件語句,例如將 age 大于 120 的設置為 120:

import pandas as pd

person = {
    "name": ['Google', 'Bing', 'Taobao'],
    "age": [50, 200, 12345]
}

df = pd.DataFrame(person)

for x in df.index:
    if df.loc[x, "age"] > 120:
        df.loc[x, "age"] = 120

print(df.to_string())

也可以將錯誤數據的行刪除,例如將 age 大于 120 的刪除:

import pandas as pd

person = {
    "name": ['Google', 'Runoob', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年齡數據是錯誤的
}

df = pd.DataFrame(person)

for x in df.index:
    if df.loc[x, "age"] > 120:
        df.drop(x, inplace=True)

print(df.to_string())

4 Pandas 清洗重復數據

如果我們要清洗重復數據,可以使用 duplicated() 和 drop_duplicates() 方法。如果對應的數據是重復的,duplicated() 會返回 True,否則返回 False。

import pandas as pd

person = {
    "name": ['Google', 'Bing', 'Bing', 'Taobao'],
    "age": [50, 40, 40, 23]
}
df = pd.DataFrame(person)

print(df.duplicated())

刪除重復數據,可以直接使用drop_duplicates() 方法。

import pandas as pd

person = {
    "name": ['Google', 'Bing', 'Bing', 'Taobao'],
    "age": [50, 40, 40, 23]
}
df = pd.DataFrame(person)

df.drop_duplicates(inplace=True)
print(df)

5 常用方法及說明

操作方法/步驟說明常用函數/方法
缺失值處理填充缺失值使用指定的值(如均值、中位數、眾數等)填充缺失值。df.fillna(value)
刪除缺失值刪除包含缺失值的行或列。df.dropna()
重復數據處理刪除重復數據刪除 DataFrame 中的重復行。df.drop_duplicates()
異常值處理異常值檢測(基于統(tǒng)計方法)通過 Z-score 或 IQR 方法識別并處理異常值。自定義函數(如基于 Z-score 或 IQR)
替換異常值使用合適的值(如均值或中位數)替換異常值。自定義函數(如替換異常值)
數據格式轉換轉換數據類型將數據類型從一個類型轉換為另一個類型,如將字符串轉換為日期。df.astype()
日期時間格式轉換轉換字符串或數字為日期時間類型。pd.to_datetime()
標準化與歸一化標準化將數據轉換為均值為0,標準差為1的分布。StandardScaler()
歸一化將數據縮放到指定的范圍(如 [0, 1])。MinMaxScaler()
類別數據編碼標簽編碼將類別變量轉換為整數形式。LabelEncoder()
獨熱編碼(One-Hot Encoding)將每個類別轉換為一個新的二進制特征。pd.get_dummies()
文本數據處理去除停用詞從文本中去除無關緊要的詞,如 "the" 、 "is" 等。自定義函數(基于 nltk 或 spaCy
詞干化與詞形還原提取詞干或恢復單詞的基本形式。nltk.stem.PorterStemmer()
分詞將文本分割成單詞或子詞。nltk.word_tokenize()
數據抽樣隨機抽樣從數據中隨機抽取一定比例的樣本。df.sample()
上采樣與下采樣通過過采樣(復制少數類樣本)或欠采樣(減少多數類樣本)來平衡數據集中的類別分布。SMOTE()(上采樣); RandomUnderSampler()(下采樣)
特征工程特征選擇選擇對目標變量有影響的特征,去除冗余或無關特征。SelectKBest()
特征提取從原始數據中創(chuàng)建新的特征,提升模型的預測能力。PolynomialFeatures()
特征縮放對數值特征進行縮放,使其具有相同的量級。MinMaxScaler() 、 StandardScaler()
類別特征映射特征映射將類別變量映射為對應的數字編碼。自定義映射函數
數據合并與連接合并數據將多個 DataFrame 按照某些列合并在一起,支持內連接、外連接、左連接、右連接等。pd.merge()
連接數據將多個 DataFrame 進行行或列拼接。pd.concat()
數據重塑數據透視表將數據根據某些維度進行分組并計算聚合結果。pd.pivot_table()
數據變形改變數據的形狀,如從長格式轉為寬格式或從寬格式轉為長格式。df.melt() 、 df.pivot()
數據類型轉換與處理字符串處理對字符串數據進行處理,如去除空格、轉換大小寫等。str.replace() 、 str.upper() 等
分組計算按照某個特征分組后進行聚合計算。df.groupby()
缺失值預測填充使用模型預測填充缺失值使用機器學習模型(如回歸模型)預測缺失值,并填充缺失數據。自定義模型(如 sklearn.linear_model.LinearRegression
時間序列處理時間序列缺失值填充使用時間序列的方法(如前向填充、后向填充)填充缺失值。df.fillna(method='ffill')
滾動窗口計算使用滑動窗口進行時間序列數據的統(tǒng)計計算(如均值、標準差等)。df.rolling(window=5).mean()
數據轉換與映射數據映射與替換將數據中的某些值替換為其他值。df.replace()

到此這篇關于Pandas 數據清洗的具體使用的文章就介紹到這了,更多相關Pandas 數據清洗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

最新評論