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

python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例詳解

 更新時(shí)間:2024年08月12日 11:05:03   作者:闌夢(mèng)清川  
數(shù)據(jù)清洗是指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識(shí)別的錯(cuò)誤的最后一道程序,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等,數(shù)據(jù)清洗與處理的目的是提高數(shù)據(jù)的質(zhì)量,提高實(shí)驗(yàn)結(jié)果的可靠度,本文給大家介紹了python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例,需要的朋友可以參考下

1.庫的相關(guān)簡(jiǎn)介

python里面是通過模塊體現(xiàn)庫的,可以降低程序員的使用成本,提高程序的開發(fā)效率;

標(biāo)準(zhǔn)庫:官方提供的;

第三方庫:其他的大佬做出來的(數(shù)量龐大);

2.數(shù)據(jù)處理之添加新列

import pandas as pd
df = pd.read_csv("/Users/feifei/hotpot.csv")
 
# 計(jì)算性價(jià)比評(píng)分,通過賦值,將結(jié)果添加為df的"性價(jià)比評(píng)分"列
df["性價(jià)比評(píng)分"] = (df["口味評(píng)分"]/df["人均消費(fèi)"])*40
 
# 計(jì)算氛圍評(píng)分,通過賦值,將結(jié)果添加為df的"氛圍評(píng)分"列
df["氛圍評(píng)分"] = (df["服務(wù)評(píng)分"]+df["環(huán)境評(píng)分"])/2
 
# 使用print()輸出df
print(df)

什么叫做添加新列,就是我們?cè)跀?shù)學(xué)建模對(duì)于數(shù)據(jù)集合進(jìn)行處理的時(shí)候,對(duì)于海量的數(shù)據(jù),我們可能會(huì)根據(jù)這個(gè)已知的數(shù)據(jù)添加新的變量之類的,這個(gè)新的變量就是我們通過已知的數(shù)據(jù)得到的新的數(shù)據(jù)變量;

在上面這個(gè)案例里面,我們通過一個(gè)店鋪的口味評(píng)分和人均消費(fèi)凝練出來一個(gè)性價(jià)比評(píng)分作為新的數(shù)據(jù)變量,根據(jù)這個(gè)店鋪的服務(wù)評(píng)分和環(huán)境評(píng)分凝練出來這個(gè)氛圍的評(píng)分作為新的數(shù)據(jù)變量,最后這兩個(gè)新的變量就會(huì)作為新的表頭顯示在我們?cè)瓉淼臄?shù)據(jù)表格里面去;

3.處理結(jié)果的小數(shù)位數(shù)的處理

我們想要對(duì)于這個(gè)處理結(jié)果的小數(shù)的位數(shù)進(jìn)行控制,我們可以使用一個(gè)函數(shù):

因?yàn)檫@個(gè)里面是進(jìn)行的多列索引,這個(gè)時(shí)候我們使用了這個(gè)索引的嵌套,round(2)表示對(duì)于所選擇的數(shù)據(jù)進(jìn)行保留兩位小數(shù)的處理,并且更新原來的數(shù)據(jù);

import pandas as pd
df = pd.read_csv("/Users/feifei/hotpot.csv")
 
# 計(jì)算性價(jià)比評(píng)分,通過賦值,將結(jié)果添加為df的"性價(jià)比評(píng)分"列
df["性價(jià)比評(píng)分"] = (df["口味評(píng)分"]/df["人均消費(fèi)"])*40
 
# 計(jì)算氛圍評(píng)分,通過賦值,將結(jié)果添加為df的"氛圍評(píng)分"列
df["氛圍評(píng)分"] = (df["服務(wù)評(píng)分"]+df["環(huán)境評(píng)分"])/2
 
# TODO 使用round()函數(shù)對(duì)2個(gè)新列保留2位小數(shù)
df[["性價(jià)比評(píng)分","氛圍評(píng)分"]] = df[["性價(jià)比評(píng)分","氛圍評(píng)分"]].round(2)
 
# 使用print()輸出df
print(df)

4.對(duì)于某一列的數(shù)據(jù)進(jìn)行排序

我們上面綜合得到了這個(gè)性價(jià)比評(píng)分和氛圍評(píng)分,我們想要根據(jù)這兩個(gè)指標(biāo)進(jìn)行這個(gè)店鋪的排名

sort_values就是一個(gè)函數(shù)的調(diào)用,by=""表示的是對(duì)于某一列的內(nèi)容進(jìn)行處理,ascending=False表示的就是以降序的形式進(jìn)行排序,如果我們沒有寫這個(gè)參數(shù)或者是等于true,都是以升序的形式進(jìn)行排序;

# 使用sort_values()對(duì)df的"性價(jià)比評(píng)分"列進(jìn)行降序排序,并賦值給df_1
df_1 = df.sort_values(by="性價(jià)比評(píng)分",ascending=False)
 
# 使用sort_values()對(duì)df的"氛圍評(píng)分"列進(jìn)行降序排序,并賦值給df_2 
df_2 = df.sort_values(by="氛圍評(píng)分",ascending=False)
 
# 使用print()輸出df_1
print(df_1)
 
# 使用print()輸出df_2
print(df_2)

5.選擇我們想要的數(shù)據(jù)集合

我們的排序也完成了,接下來的就是只保留這個(gè)店鋪的名稱和性價(jià)比,并且打印顯示出來前面的10名店鋪?zhàn)鳛槲覀兊淖罴堰x擇;

head函數(shù)就會(huì)篩選出來前面的10個(gè)店鋪打印出來,df_atmospyere這個(gè)里面存儲(chǔ)的就是我們想要的兩列的數(shù)據(jù)集合;

# TODO 使用sort_values()對(duì)df的列"氛圍評(píng)分"進(jìn)行降序排序,并賦值給df_2
df_2 = df.sort_values(by="氛圍評(píng)分",ascending=False)
 
# TODO 使用多列索引的方式,訪問df_2的"店鋪名稱"和"氛圍評(píng)分"2列,并賦值給df_atmosphere
df_atmosphere = df_2[["店鋪名稱","氛圍評(píng)分"]]
 
# TODO 使用print()輸出df_atmosphere的前10行
print(df_atmosphere.head(10))

6.臟數(shù)據(jù)的介紹

6.1背景介紹

臟數(shù)據(jù)包括異常值,缺失值和重復(fù)值,把臟數(shù)據(jù)篩選出來,進(jìn)行修正,填補(bǔ)的工作的過程,就是數(shù)據(jù)的清洗;

我們想要去處理這些臟的數(shù)據(jù),就要首先導(dǎo)入這個(gè)pandas模塊,進(jìn)行文件的讀取,然后進(jìn)行這個(gè)數(shù)據(jù)集的格式轉(zhuǎn)換,把這個(gè)里面的數(shù)據(jù)類型,單位進(jìn)行修改;

下面的這個(gè)是一個(gè)平臺(tái)的會(huì)員開通情況數(shù)據(jù)集合:

上面的這個(gè)就是我們要處理的數(shù)據(jù)大致情況,因?yàn)閿?shù)據(jù)量很大,我們只截取出來這個(gè)里面的一小部分?jǐn)?shù)據(jù),簡(jiǎn)單的說明一下,這個(gè)表頭的實(shí)際含義,分別是訂單的編號(hào),用戶的id,價(jià)格(以分為單位),支付平臺(tái),支付渠道,支付方式,交易時(shí)間,支付時(shí)間;

6.2時(shí)間序列轉(zhuǎn)換

# 導(dǎo)入pandas模塊,簡(jiǎn)稱為pd
import pandas as pd
 
# 讀取路徑為"/Users/clean/視頻會(huì)員訂單數(shù)據(jù)源.csv"的文件,賦值給變量df
df = pd.read_csv("/Users/clean/視頻會(huì)員訂單數(shù)據(jù)源.csv")
 
# 商品價(jià)格price,單位分轉(zhuǎn)化成元
df['price'] = df['price'] /100
 
# 使用to_datetime()函數(shù),將訂單創(chuàng)建時(shí)間create_time,轉(zhuǎn)化成時(shí)間格式
df['create_time'] = pd.to_datetime(df['create_time'])
 
# TODO 使用to_datetime()函數(shù),將訂單支付時(shí)間pay_time,轉(zhuǎn)化成時(shí)間格式
df['pay_time'] = pd.to_datetime(df['pay_time'])
 
# 輸出此時(shí)的df
print(df)

上面做的工作就是在原來的表格的基礎(chǔ)上面進(jìn)行這個(gè)單位的修改,把原來以分為單位的數(shù)據(jù)轉(zhuǎn)換為以元為單位,把這個(gè)訂單的兩個(gè)時(shí)間全部轉(zhuǎn)換為時(shí)間格式:使用to_datatime函數(shù);

7.數(shù)據(jù)清洗

7.1快速瀏覽數(shù)據(jù)

我們上面已經(jīng)完成了準(zhǔn)備的工作,就是把這個(gè)相關(guān)的單位進(jìn)行修正,和我們的這個(gè)時(shí)間序列的轉(zhuǎn)換

下面我們使用這個(gè)info函數(shù)快速地瀏覽全部數(shù)據(jù),確定每一列的數(shù)據(jù)的缺失情況,這個(gè)函數(shù)相當(dāng)于print打印功能,顯示出來存在的數(shù)據(jù)個(gè)數(shù),通過這個(gè)打印結(jié)果,我們就可以發(fā)現(xiàn),其他列的數(shù)據(jù)全部是78049,而這個(gè)platform這一列卻是77645,這個(gè)時(shí)候我們就可以知道那些列缺失了多少的數(shù)據(jù),因?yàn)榇蟛糠值臄?shù)據(jù)都是完整的,只需要找出與眾不同的數(shù)字;

7.2找到缺失值

我們上面已經(jīng)確定這個(gè)數(shù)據(jù)是存在缺失的情況的,但是我們應(yīng)該如何找到缺失數(shù)據(jù)的具體的位置呢

我們可以使用insull函數(shù):找到一列里面每一行的數(shù)據(jù)是否缺失;

8.分類對(duì)于缺失的數(shù)據(jù)進(jìn)行處理

數(shù)據(jù)缺失了怎么辦,直接刪除還是補(bǔ)全,針對(duì)于這個(gè)數(shù)據(jù)的多少和數(shù)據(jù)的重要程度,我們需要分情況進(jìn)行處理;

如果是對(duì)于我們的研究很重要的數(shù)據(jù),我們刪除顯然是不合適的;

但是如果一個(gè)數(shù)據(jù)集合有幾十萬的數(shù)據(jù),我們刪除幾百個(gè)也是無傷大雅的:drop函數(shù);

如果缺失值的數(shù)量較多,并且缺失值所在的這一列(這一個(gè)屬性),并不是我們分析的重點(diǎn)時(shí),可以對(duì)缺失值進(jìn)行補(bǔ)全:fillna函數(shù);

8.1對(duì)于缺失值的刪除

我們首先篩選出來這個(gè)缺失值所在的行標(biāo),存儲(chǔ)到dfPayNull這個(gè)series里面;

接下來使用drop函數(shù)進(jìn)行數(shù)據(jù)的刪除(刪除行),參數(shù)就是我們得到的這個(gè)dfpaynull的index索引

# 使用布爾索引和isnull函數(shù),將payment_provider這一列的缺失值篩選出,賦值給變量dfPayNull
 
# dfPayNull就是,包含所有payment_provider這一列缺失值的行
dfPayNull = df[df['payment_provider'].isnull()]
 
# TODO 使用drop函數(shù),將dfPayNull,也就是包含所有payment_provider這一列缺失值的行刪除
df.drop(index=dfPayNull.index,inplace=True)
 
# 使用df.info(),快速瀏覽數(shù)據(jù)集
df.info()

8.2對(duì)于缺失值的填充

df['platform']使我們需要填充的列對(duì)象,這個(gè)對(duì)象去調(diào)用fillna函數(shù),參數(shù)有兩個(gè),第一個(gè)就是填充的內(nèi)容,第二個(gè)就是缺失的行標(biāo);

# TODO 使用fillna()函數(shù),用"unknown"填充platform的缺失值
df['platform'].fillna("unknown",inplace=True)
 
# 輸出df.info()
df.info()

9.分析處理異常值

9.1一般處理

首先是一些比較明顯的異常值:例如這個(gè)id肯定不可能是負(fù)數(shù),這個(gè)時(shí)候?qū)τ趇d<0這個(gè)判斷條件對(duì)于異常值進(jìn)行刪選。但是更多的是下面的情況:

這個(gè)時(shí)候我們需要使用一個(gè)函數(shù)進(jìn)行處理:isin()函數(shù)

9.2特殊情況

我們使用這個(gè)函數(shù)篩選出來不是某些數(shù)據(jù)的索引,我們使用這個(gè)函數(shù),異常數(shù)據(jù)返回的是false,這個(gè)時(shí)候我們使用取反運(yùn)算符,當(dāng)這個(gè)返回false就是我們認(rèn)定的異常值;

9.3交易時(shí)間的篩選

交易時(shí)間必須在提交訂單時(shí)間的后面,這個(gè)才是正常的,這個(gè)可以作為一個(gè)判斷條件;

# TODO 使用布爾索引,將支付時(shí)間pay_time小于創(chuàng)建時(shí)間create_time的異常值篩選出來,賦值給變量dfWrongTime
 
dfWrongTime = df[df['pay_time'] < df['create_time']]
 
# 使用print輸出dfWrongTime
 
print(dfWrongTime)

10.分析處理重復(fù)值

pandas的duplicated()函數(shù)專門對(duì)重復(fù)值進(jìn)行處理。

duplicated()函數(shù),判斷重復(fù)的機(jī)制,是會(huì)把出現(xiàn)相同值的第二個(gè)及以后的數(shù)據(jù),判斷為True

這樣,保證每個(gè)數(shù)據(jù)都保留一個(gè)唯一值。

# 使用布爾索引、duplicated函數(shù),將order_id這一列的重復(fù)值篩選出來,賦值給變量dfOrderDu
dfOrderDu = df[df['order_id'].duplicated()]

以上就是python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于python數(shù)據(jù)處理和清洗的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論