python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例詳解
1.庫的相關(guā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")
# 計算性價比評分,通過賦值,將結(jié)果添加為df的"性價比評分"列
df["性價比評分"] = (df["口味評分"]/df["人均消費"])*40
# 計算氛圍評分,通過賦值,將結(jié)果添加為df的"氛圍評分"列
df["氛圍評分"] = (df["服務(wù)評分"]+df["環(huán)境評分"])/2
# 使用print()輸出df
print(df)什么叫做添加新列,就是我們在數(shù)學(xué)建模對于數(shù)據(jù)集合進行處理的時候,對于海量的數(shù)據(jù),我們可能會根據(jù)這個已知的數(shù)據(jù)添加新的變量之類的,這個新的變量就是我們通過已知的數(shù)據(jù)得到的新的數(shù)據(jù)變量;
在上面這個案例里面,我們通過一個店鋪的口味評分和人均消費凝練出來一個性價比評分作為新的數(shù)據(jù)變量,根據(jù)這個店鋪的服務(wù)評分和環(huán)境評分凝練出來這個氛圍的評分作為新的數(shù)據(jù)變量,最后這兩個新的變量就會作為新的表頭顯示在我們原來的數(shù)據(jù)表格里面去;
3.處理結(jié)果的小數(shù)位數(shù)的處理

我們想要對于這個處理結(jié)果的小數(shù)的位數(shù)進行控制,我們可以使用一個函數(shù):
因為這個里面是進行的多列索引,這個時候我們使用了這個索引的嵌套,round(2)表示對于所選擇的數(shù)據(jù)進行保留兩位小數(shù)的處理,并且更新原來的數(shù)據(jù);
import pandas as pd
df = pd.read_csv("/Users/feifei/hotpot.csv")
# 計算性價比評分,通過賦值,將結(jié)果添加為df的"性價比評分"列
df["性價比評分"] = (df["口味評分"]/df["人均消費"])*40
# 計算氛圍評分,通過賦值,將結(jié)果添加為df的"氛圍評分"列
df["氛圍評分"] = (df["服務(wù)評分"]+df["環(huán)境評分"])/2
# TODO 使用round()函數(shù)對2個新列保留2位小數(shù)
df[["性價比評分","氛圍評分"]] = df[["性價比評分","氛圍評分"]].round(2)
# 使用print()輸出df
print(df)4.對于某一列的數(shù)據(jù)進行排序
我們上面綜合得到了這個性價比評分和氛圍評分,我們想要根據(jù)這兩個指標(biāo)進行這個店鋪的排名
sort_values就是一個函數(shù)的調(diào)用,by=""表示的是對于某一列的內(nèi)容進行處理,ascending=False表示的就是以降序的形式進行排序,如果我們沒有寫這個參數(shù)或者是等于true,都是以升序的形式進行排序;
# 使用sort_values()對df的"性價比評分"列進行降序排序,并賦值給df_1 df_1 = df.sort_values(by="性價比評分",ascending=False) # 使用sort_values()對df的"氛圍評分"列進行降序排序,并賦值給df_2 df_2 = df.sort_values(by="氛圍評分",ascending=False) # 使用print()輸出df_1 print(df_1) # 使用print()輸出df_2 print(df_2)
5.選擇我們想要的數(shù)據(jù)集合
我們的排序也完成了,接下來的就是只保留這個店鋪的名稱和性價比,并且打印顯示出來前面的10名店鋪作為我們的最佳選擇;
head函數(shù)就會篩選出來前面的10個店鋪打印出來,df_atmospyere這個里面存儲的就是我們想要的兩列的數(shù)據(jù)集合;
# TODO 使用sort_values()對df的列"氛圍評分"進行降序排序,并賦值給df_2 df_2 = df.sort_values(by="氛圍評分",ascending=False) # TODO 使用多列索引的方式,訪問df_2的"店鋪名稱"和"氛圍評分"2列,并賦值給df_atmosphere df_atmosphere = df_2[["店鋪名稱","氛圍評分"]] # TODO 使用print()輸出df_atmosphere的前10行 print(df_atmosphere.head(10))
6.臟數(shù)據(jù)的介紹
6.1背景介紹
臟數(shù)據(jù)包括異常值,缺失值和重復(fù)值,把臟數(shù)據(jù)篩選出來,進行修正,填補的工作的過程,就是數(shù)據(jù)的清洗;
我們想要去處理這些臟的數(shù)據(jù),就要首先導(dǎo)入這個pandas模塊,進行文件的讀取,然后進行這個數(shù)據(jù)集的格式轉(zhuǎn)換,把這個里面的數(shù)據(jù)類型,單位進行修改;
下面的這個是一個平臺的會員開通情況數(shù)據(jù)集合:

上面的這個就是我們要處理的數(shù)據(jù)大致情況,因為數(shù)據(jù)量很大,我們只截取出來這個里面的一小部分?jǐn)?shù)據(jù),簡單的說明一下,這個表頭的實際含義,分別是訂單的編號,用戶的id,價格(以分為單位),支付平臺,支付渠道,支付方式,交易時間,支付時間;
6.2時間序列轉(zhuǎn)換
# 導(dǎo)入pandas模塊,簡稱為pd
import pandas as pd
# 讀取路徑為"/Users/clean/視頻會員訂單數(shù)據(jù)源.csv"的文件,賦值給變量df
df = pd.read_csv("/Users/clean/視頻會員訂單數(shù)據(jù)源.csv")
# 商品價格price,單位分轉(zhuǎn)化成元
df['price'] = df['price'] /100
# 使用to_datetime()函數(shù),將訂單創(chuàng)建時間create_time,轉(zhuǎn)化成時間格式
df['create_time'] = pd.to_datetime(df['create_time'])
# TODO 使用to_datetime()函數(shù),將訂單支付時間pay_time,轉(zhuǎn)化成時間格式
df['pay_time'] = pd.to_datetime(df['pay_time'])
# 輸出此時的df
print(df)上面做的工作就是在原來的表格的基礎(chǔ)上面進行這個單位的修改,把原來以分為單位的數(shù)據(jù)轉(zhuǎn)換為以元為單位,把這個訂單的兩個時間全部轉(zhuǎn)換為時間格式:使用to_datatime函數(shù);
7.數(shù)據(jù)清洗
7.1快速瀏覽數(shù)據(jù)
我們上面已經(jīng)完成了準(zhǔn)備的工作,就是把這個相關(guān)的單位進行修正,和我們的這個時間序列的轉(zhuǎn)換
下面我們使用這個info函數(shù)快速地瀏覽全部數(shù)據(jù),確定每一列的數(shù)據(jù)的缺失情況,這個函數(shù)相當(dāng)于print打印功能,顯示出來存在的數(shù)據(jù)個數(shù),通過這個打印結(jié)果,我們就可以發(fā)現(xiàn),其他列的數(shù)據(jù)全部是78049,而這個platform這一列卻是77645,這個時候我們就可以知道那些列缺失了多少的數(shù)據(jù),因為大部分的數(shù)據(jù)都是完整的,只需要找出與眾不同的數(shù)字;

7.2找到缺失值
我們上面已經(jīng)確定這個數(shù)據(jù)是存在缺失的情況的,但是我們應(yīng)該如何找到缺失數(shù)據(jù)的具體的位置呢
我們可以使用insull函數(shù):找到一列里面每一行的數(shù)據(jù)是否缺失;

8.分類對于缺失的數(shù)據(jù)進行處理
數(shù)據(jù)缺失了怎么辦,直接刪除還是補全,針對于這個數(shù)據(jù)的多少和數(shù)據(jù)的重要程度,我們需要分情況進行處理;
如果是對于我們的研究很重要的數(shù)據(jù),我們刪除顯然是不合適的;
但是如果一個數(shù)據(jù)集合有幾十萬的數(shù)據(jù),我們刪除幾百個也是無傷大雅的:drop函數(shù);
如果缺失值的數(shù)量較多,并且缺失值所在的這一列(這一個屬性),并不是我們分析的重點時,可以對缺失值進行補全:fillna函數(shù);
8.1對于缺失值的刪除
我們首先篩選出來這個缺失值所在的行標(biāo),存儲到dfPayNull這個series里面;
接下來使用drop函數(shù)進行數(shù)據(jù)的刪除(刪除行),參數(shù)就是我們得到的這個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對于缺失值的填充
df['platform']使我們需要填充的列對象,這個對象去調(diào)用fillna函數(shù),參數(shù)有兩個,第一個就是填充的內(nèi)容,第二個就是缺失的行標(biāo);
# TODO 使用fillna()函數(shù),用"unknown"填充platform的缺失值
df['platform'].fillna("unknown",inplace=True)
# 輸出df.info()
df.info()9.分析處理異常值
9.1一般處理
首先是一些比較明顯的異常值:例如這個id肯定不可能是負(fù)數(shù),這個時候?qū)τ趇d<0這個判斷條件對于異常值進行刪選。但是更多的是下面的情況:

這個時候我們需要使用一個函數(shù)進行處理:isin()函數(shù)
9.2特殊情況
我們使用這個函數(shù)篩選出來不是某些數(shù)據(jù)的索引,我們使用這個函數(shù),異常數(shù)據(jù)返回的是false,這個時候我們使用取反運算符,當(dāng)這個返回false就是我們認(rèn)定的異常值;

9.3交易時間的篩選
交易時間必須在提交訂單時間的后面,這個才是正常的,這個可以作為一個判斷條件;
# TODO 使用布爾索引,將支付時間pay_time小于創(chuàng)建時間create_time的異常值篩選出來,賦值給變量dfWrongTime dfWrongTime = df[df['pay_time'] < df['create_time']] # 使用print輸出dfWrongTime print(dfWrongTime)
10.分析處理重復(fù)值
pandas的duplicated()函數(shù)專門對重復(fù)值進行處理。
duplicated()函數(shù),判斷重復(fù)的機制,是會把出現(xiàn)相同值的第二個及以后的數(shù)據(jù),判斷為True
這樣,保證每個數(shù)據(jù)都保留一個唯一值。
# 使用布爾索引、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ù)處理和清洗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實現(xiàn)批量填補遙感影像的無效值NoData
這篇文章主要為大家介紹了如何基于Python中ArcPy模塊,對大量柵格遙感影像文件批量進行無效值(NoData值)填充的方法,感興趣的小伙伴可以了解一下2023-06-06
詳解python如何調(diào)用C/C++底層庫與互相傳值
Python作為一門腳本解釋語言,本身又很好的結(jié)合C++,所以使用Python開發(fā),在性能要求的地方調(diào)用C/C++底層庫,這簡直是神器。本文詳細(xì)介紹了Python調(diào)用C/C++底層庫,互相傳值問題,下面一起來看看。2016-08-08
Paddle模型性能分析工具Profiler定位瓶頸點優(yōu)化程序詳解
這篇文章主要為大家介紹了Paddle模型性能分析工具Profiler定位瓶頸點優(yōu)化程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Pycharm學(xué)習(xí)教程(2) 代碼風(fēng)格
這篇文章主要為大家詳細(xì)介紹了最全的Pycharm學(xué)習(xí)教程第二篇代碼風(fēng)格,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
flask 使用 flask_apscheduler 做定時循環(huán)任務(wù)的實現(xiàn)
這篇文章主要介紹了flask 使用 flask_apscheduler 做定時循環(huán)任務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Pandas DataFrame 篩選數(shù)據(jù)幾種方法實現(xiàn)
本文介紹了四種在DataFrame中篩選數(shù)據(jù)的方法:根據(jù)字段、標(biāo)簽、位置、布爾索引和通過query進行篩選,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12

