Python pandas進行數(shù)據(jù)預處理的實現(xiàn)
案例:電子商務客戶數(shù)據(jù)的預處理
本案例將通過使用pandas庫對電子商務客戶數(shù)據(jù)進行數(shù)據(jù)預處理。數(shù)據(jù)預處理是進行有效數(shù)據(jù)分析的重要步驟,目的是將數(shù)據(jù)處理為適合分析的狀態(tài)。本案例分為幾個步驟來逐步演示如何進行數(shù)據(jù)導入、查看數(shù)據(jù)集信息、處理缺失值、數(shù)據(jù)格式轉(zhuǎn)換、重復值刪除、數(shù)據(jù)標準化以及數(shù)據(jù)導出。
測試數(shù)據(jù)
以下是我們將要處理的測試數(shù)據(jù),以電子商務客戶訂單為例:
| CustomerID | OrderDate | Product | Quantity | Price |
|---|---|---|---|---|
| C001 | 2024-01-10 | 智能手機 | 2 | 500.00 |
| C002 | 2024-01-12 | 筆記本電腦 | 1 | 1200.00 |
| C003 | NaN | 耳機 | 3 | 50.00 |
| C001 | 2024-01-15 | 平板電腦 | 1 | 300.00 |
| C004 | 2024-01-18 | 筆記本電腦 | 1 | 1200.00 |
| C005 | 2024-01-20 | 智能手機 | 2 | NaN |
| C001 | 2024-01-15 | 平板電腦 | 1 | 300.00 |
| C006 | 2024-01-22 | 耳機 | 2 | 100.00 |
| C007 | 2024-01-25 | 智能手表 | 1 | 200.00 |
| C008 | 2024-01-28 | 平板電腦 | 3 | 900.00 |
| C009 | 2024-01-30 | 筆記本電腦 | 1 | 1500.00 |
| C010 | 2024-02-01 | 智能手機 | 4 | 2000.00 |
| C011 | 2024-02-05 | 耳機 | 5 | 250.00 |
| C012 | 2024-02-08 | 平板電腦 | 1 | 300.00 |
| C013 | 2024-02-10 | 智能手表 | 2 | 400.00 |
| C014 | 2024-02-12 | 筆記本電腦 | 2 | 2400.00 |
| C015 | 2024-02-15 | 智能手機 | 1 | 1000.00 |
| C016 | 2024-02-18 | 平板電腦 | 2 | 600.00 |
| C017 | 2024-02-20 | 智能手表 | 3 | 600.00 |
| C018 | 2024-02-22 | 耳機 | 1 | 50.00 |
| C019 | 2024-02-25 | 智能手機 | 2 | 1200.00 |
| C020 | 2024-02-28 | 筆記本電腦 | 1 | 1300.00 |
步驟1:數(shù)據(jù)導入
首先,使用pandas導入CSV文件并加載數(shù)據(jù)。
import pandas as pd
# 導入CSV文件
df = pd.read_csv('ecommerce_customers.csv')
解析:首先導入pandas庫,pd.read_csv()方法用于加載CSV文件,并將其存儲在名為df的數(shù)據(jù)框中。
步驟2:查看數(shù)據(jù)集基本信息
使用pandas的各種方法來查看數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容,以便對數(shù)據(jù)有初步的了解。
# 查看數(shù)據(jù)的前幾行 print(df.head()) # 查看數(shù)據(jù)類型和列信息 print(df.info()) # 數(shù)值列的簡單統(tǒng)計分析 print(df.describe())
解析:
df.head():查看數(shù)據(jù)的前幾行,幫助快速了解數(shù)據(jù)的基本結(jié)構(gòu)。
運行結(jié)果:
CustomerID OrderDate Product Quantity Price
0 C001 2024-01-10 智能手機 2 500.0
1 C002 2024-01-12 筆記本電腦 1 1200.0
2 C003 NaN 耳機 3 50.0
3 C001 2024-01-15 平板電腦 1 300.0
4 C004 2024-01-18 筆記本電腦 1 1200.0
通過head()方法,我們可以快速查看數(shù)據(jù)的前5行,了解數(shù)據(jù)的大致內(nèi)容。
df.info():顯示數(shù)據(jù)集的列、非空值數(shù)量和數(shù)據(jù)類型,幫助了解數(shù)據(jù)集的整體情況。
運行結(jié)果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CustomerID 20 non-null object
1 OrderDate 19 non-null object
2 Product 20 non-null object
3 Quantity 20 non-null int64
4 Price 19 non-null float64
dtypes: float64(1), int64(1), object(3)
memory usage: 928.0+ bytes
通過info()方法,我們可以看到數(shù)據(jù)集中每一列的名稱、數(shù)據(jù)類型,以及非空值的數(shù)量,這對于后續(xù)判斷是否有缺失值非常有幫助。
df.describe():對數(shù)值列進行統(tǒng)計分析,提供如均值、標準差等信息。
運行結(jié)果:
Quantity Price
count 20.000000 19.000000
mean 2.000000 810.526316
std 1.055597 714.053229
min 1.000000 50.000000
25% 1.000000 300.000000
50% 2.000000 1000.000000
75% 3.000000 1200.000000
max 5.000000 2400.000000
通過describe()方法,我們可以看到數(shù)值列(如Quantity和Price)的統(tǒng)計信息,如均值、中位數(shù)、標準差等,這對于數(shù)據(jù)的分布和特征分析非常重要。
`count` 表示數(shù)據(jù)集中非空值的數(shù)量。對于 `Quantity` 列,所有 20 個值都是非空的;而對于 `Price` 列,只有 19 個非空值,說明有一個缺失值。
`mean` 表示列的平均值。`Quantity` 列的平均購買量是 2;`Price` 列的平均價格是 810.53。步驟3:處理缺失值。
`min` 表示列中的最小值。`Quantity` 列的最小購買量是 1;`Price` 列的最低價格是 50。
`25%` 表示第一四分位數(shù),即 25% 的數(shù)據(jù)點小于或等于這個值。對于 `Quantity` 列,第一四分位數(shù)是 1;對于 `Price` 列,這個值是 300。
`50%` 表示中位數(shù),即 50% 的數(shù)據(jù)點小于或等于這個值。`Quantity` 列的中位數(shù)為 2;`Price` 列的中位數(shù)為 1000。
`75%` 表示第三四分位數(shù),即 75% 的數(shù)據(jù)點小于或等于這個值。`Quantity` 列的第三四分位數(shù)是 3;`Price` 列的第三四分位數(shù)是 1200。
`max` 表示列中的最大值。`Quantity` 列的最大購買量是 5;`Price` 列的最高價格是 2400。
處理數(shù)據(jù)中的缺失值。在本案例中,OrderDate和Price列中存在缺失值。
# 查看缺失值
def missing_values(df):
return df.isnull().sum()
print(missing_values(df))
# 填充缺失的價格列,以平均值替代
df['Price'].fillna(df['Price'].mean(), inplace=True)
# 填充缺失的訂單日期,以特定日期替代
df['OrderDate'].fillna('2024-01-01', inplace=True)
解析:
df.isnull().sum():統(tǒng)計每一列的缺失值數(shù)量,幫助識別數(shù)據(jù)中的空缺項。df['Price'].fillna(df['Price'].mean(), inplace=True):使用均值填充Price列的缺失值,確保數(shù)據(jù)的完整性。inplace=True 是一個參數(shù),用于指定操作是否在原數(shù)據(jù)框上進行修改。設置 inplace=True 后,操作會直接對原數(shù)據(jù)框進行更改,而不會返回一個新的數(shù)據(jù)框。這有助于節(jié)省內(nèi)存,但需要謹慎使用,因為數(shù)據(jù)的修改是不可逆的。df['OrderDate'].fillna('2024-01-01', inplace=True):將OrderDate列的缺失值填充為默認日期2024-01-01。
步驟4:數(shù)據(jù)格式轉(zhuǎn)換
將OrderDate列從字符串轉(zhuǎn)換為日期類型,以便后續(xù)進行時間序列分析。
# 將OrderDate轉(zhuǎn)換為日期類型 df['OrderDate'] = pd.to_datetime(df['OrderDate'])
解析:pd.to_datetime(df['OrderDate'])將OrderDate列轉(zhuǎn)換為日期時間格式,這樣可以方便后續(xù)的日期相關(guān)分析,例如排序或時間序列分析。
步驟5:處理重復值
查找并刪除數(shù)據(jù)集中的重復值,以保證數(shù)據(jù)的準確性。
# 查找重復的行 duplicates = df[df.duplicated()] print(duplicates) # 刪除重復的行 df.drop_duplicates(inplace=True)
解析:
df.duplicated():標記數(shù)據(jù)集中重復的行。df.drop_duplicates(inplace=True):刪除所有重復的行,確保數(shù)據(jù)集不包含重復記錄,從而提高分析結(jié)果的準確性。
步驟6:數(shù)據(jù)標準化
對Price列進行標準化,以便后續(xù)的分析和建模。
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['Price'] = scaler.fit_transform(df[['Price']])
解析:
- 導入
MinMaxScaler用于對數(shù)據(jù)進行縮放。 scaler.fit_transform(df[['Price']])將Price列的值縮放到0到1之間,標準化后的數(shù)據(jù)更適合用于機器學習模型。
步驟7:保存預處理后的數(shù)據(jù)
最后,將預處理后的數(shù)據(jù)保存為一個新的CSV文件,以供后續(xù)分析使用。
# 導出為新文件
df.to_csv('ecommerce_customers_cleaned.csv', index=False)
解析:df.to_csv()方法將處理過的數(shù)據(jù)保存為新的CSV文件,index=False表示不保存索引列。
總結(jié)
通過上述步驟,我們已經(jīng)對電子商務客戶數(shù)據(jù)集進行了數(shù)據(jù)預處理,涵蓋了數(shù)據(jù)的導入、查看、缺失值處理、數(shù)據(jù)格式轉(zhuǎn)換、重復值刪除、數(shù)據(jù)標準化以及數(shù)據(jù)導出。通過這個案例,學生可以理解數(shù)據(jù)預處理的關(guān)鍵步驟和技巧,為后續(xù)的數(shù)據(jù)分析和建模做好準備。
到此這篇關(guān)于Python pandas進行數(shù)據(jù)預處理的實現(xiàn)的文章就介紹到這了,更多相關(guān)pandas數(shù)據(jù)預處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中Selenium最常用的八大元素定位的實戰(zhàn)指南
在 Selenium 自動化測試中,元素定位是核心基礎,本文將系統(tǒng)講解 Selenium 最常用的八大元素定位方法,結(jié)合圖標、實戰(zhàn)代碼和對比圖表,幫你快速掌握定位技巧2025-10-10
Python的線程使用隊列Queue來改造轉(zhuǎn)賬場景
前篇我們了隊列Queue和轉(zhuǎn)賬場景這次趁熱學委展示一下使用隊列解決轉(zhuǎn)賬場景的問題,這篇文章主要介紹了Python的線程使用隊列來改造轉(zhuǎn)賬場景,需要的朋友可以參考一下2022-02-02
python+Matplotlib?繪制帶置信區(qū)間的折線圖
這篇文章主要介紹了python繪制帶置信區(qū)間的折線圖,在本文中,我們將使用?numpy?模塊生成隨機數(shù)據(jù),并使用?matplotlib?庫實現(xiàn)數(shù)據(jù)可視化,需要的朋友可以參考下2023-05-05
python下setuptools的安裝詳解及No module named setuptools的解決方法
這篇文章主要給大家介紹了關(guān)于python下setuptools的安裝以及No module named setuptools問題的解決方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-07-07
python實現(xiàn)web應用框架之增加動態(tài)路由
這篇文章主要介紹web應用框架如何添加動態(tài)路由,在我們編寫的框架中,我們添加動態(tài)路由,是使用了正則表達式,同時在注冊的時候,需要注明該路由是請求路由,文中有詳細的代碼示例,需要的朋友可以參考下2023-05-05

