欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas 數(shù)據(jù)清洗的具體使用

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

數(shù)據(jù)清洗是對(duì)一些沒(méi)有用的數(shù)據(jù)進(jìn)行處理的過(guò)程。很多數(shù)據(jù)集存在數(shù)據(jù)缺失、數(shù)據(jù)格式錯(cuò)誤、錯(cuò)誤數(shù)據(jù)或重復(fù)數(shù)據(jù)的情況,如果要使數(shù)據(jù)分析更加準(zhǔn)確,就需要對(duì)這些沒(méi)有用的數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)清洗與預(yù)處理的常見(jiàn)步驟:

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

本文使用到的測(cè)試數(shù)據(jù) property-data.csv 如下:

上表包含了四種空數(shù)據(jù):

  • n/a
  • NA
  • na

1 Pandas 清洗空值

如果我們要?jiǎng)h除包含空字段的行,可以使用 dropna() 方法,語(yǔ)法格式如下:

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

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

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

import pandas as pd

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

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

以上例子中我們看到 Pandas 沒(méi)有把 n/a 和 NA 當(dāng)作空數(shù)據(jù),不符合我們要求,我們可以指定空數(shù)據(jù)類(lèi)型:

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() 刪除包含空數(shù)據(jù)的行

接下來(lái)的實(shí)例演示了刪除包含空數(shù)據(jù)的行。

import pandas as pd

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

new_df = df.dropna()

print(new_df.to_string())

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

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() 方法來(lái)替換一些空字段:

import pandas as pd

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

df.fillna(12345, inplace=True)

print(df.to_string())

我們也可以指定某一個(gè)列來(lái)替換數(shù)據(jù),例如使用 12345 替換 PID 為空數(shù)據(jù):

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

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

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())

以上實(shí)例輸出結(jié)果如下,紅框?yàn)橛?jì)算的中位數(shù)替換來(lái)空單元格: 

1.3.2 median() 中位數(shù)替換

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() 眾數(shù)替換

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()可能會(huì)出現(xiàn)多個(gè)值,所以需要用values[index]指定。

2 Pandas 清洗格式錯(cuò)誤數(shù)據(jù)

數(shù)據(jù)格式錯(cuò)誤的單元格會(huì)使數(shù)據(jù)分析變得困難,甚至不可能。我們可以通過(guò)包含空單元格的行,或者將列中的所有單元格轉(zhuǎn)換為相同格式的數(shù)據(jù)。以下實(shí)例會(huì)格式化日期:

import pandas as pd

# 第三個(gè)日期格式錯(cuò)誤
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 清洗錯(cuò)誤數(shù)據(jù)

數(shù)據(jù)錯(cuò)誤也是很常見(jiàn)的情況,我們可以對(duì)錯(cuò)誤的數(shù)據(jù)進(jìn)行替換或移除。以下實(shí)例會(huì)替換錯(cuò)誤年齡的數(shù)據(jù):

import pandas as pd

person = {
    "name": ['Google', 'Bing', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年齡數(shù)據(jù)是錯(cuò)誤的
}

df = pd.DataFrame(person)

df.loc[2, 'age'] = 30  # 修改數(shù)據(jù)

print(df.to_string())

也可以設(shè)置條件語(yǔ)句,例如將 age 大于 120 的設(shè)置為 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())

也可以將錯(cuò)誤數(shù)據(jù)的行刪除,例如將 age 大于 120 的刪除:

import pandas as pd

person = {
    "name": ['Google', 'Runoob', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年齡數(shù)據(jù)是錯(cuò)誤的
}

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 清洗重復(fù)數(shù)據(jù)

如果我們要清洗重復(fù)數(shù)據(jù),可以使用 duplicated() 和 drop_duplicates() 方法。如果對(duì)應(yīng)的數(shù)據(jù)是重復(fù)的,duplicated() 會(huì)返回 True,否則返回 False。

import pandas as pd

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

print(df.duplicated())

刪除重復(fù)數(shù)據(jù),可以直接使用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 常用方法及說(shuō)明

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

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

相關(guān)文章

最新評(píng)論