在數據驅動的時代,有效的數據治理是企業挖掘數據價值、驅動科學決策的基石。數據分析與清洗作為數據治理流程中的核心環節,直接決定了后續分析與建模的質量。本文將聚焦于強大的Python數據分析庫pandas,探討如何高效地進行數據清洗、分析,并重點介紹創建新字段的實用技巧。為助力讀者實踐,文末將提供同款示例數據供下載練習。
pandas是基于NumPy構建的、專為結構化數據(如表格數據)設計的庫。它提供了兩種核心數據結構:Series(一維數組)和DataFrame(二維表格)。憑借其簡潔的API和強大的功能,pandas已成為數據科學家和數據分析師進行數據預處理和探索性分析(EDA)的首選工具。其核心優勢在于能輕松處理數據加載、清洗、轉換、合并、重塑以及分析等一系列任務。
在利用pandas處理數據時,通常遵循以下關鍵步驟:
pd.read<em>csv()、pd.read</em>excel()等函數將數據加載為DataFrame。隨后通過.head()、.info()、.describe()方法快速了解數據規模、列類型、缺失值和統計摘要。.isnull()或.isna()。.dropna()刪除含有缺失值的行或列。.fillna()用特定值(如均值、中位數、眾數或前向/后向填充)進行填充。.duplicated()識別重復行,并用.drop_duplicates()刪除,確保數據唯一性。.astype()轉換列的數據類型(如將字符串轉為日期)。對于分類數據或文本數據,可能需要進行標準化(如大小寫統一)或編碼(如獨熱編碼)。創建新字段(派生列)是數據分析中從現有數據提煉新信息的關鍵操作。pandas提供了極其靈活的方式來實現。
直接對列進行數學運算來創建新列。`python
import pandas as pd
# 假設df中有‘單價’和‘數量’列
df['總金額'] = df['單價'] * df['數量']`
apply()函數應用自定義邏輯當創建邏輯較為復雜時,apply()函數非常強大,它可以將一個函數應用到DataFrame的每一行或每一列。`python
# 示例:根據成績創建等級列
def get_grade(score):
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
else:
return 'C'
df['等級'] = df['成績'].apply(get_grade)`
assign()方法進行鏈式操作assign()方法可以方便地在不修改原DataFrame的情況下創建新列,并支持鏈式調用,使代碼更清晰。`python
df = df.assign(
折扣后金額 = lambda x: x['總金額'] * 0.9,
是否大單 = lambda x: x['折扣后金額'] > 1000
)`
np.where()或.mask()/.where()np.where()函數是進行元素級條件賦值的利器。`python
import numpy as np
df['客戶類型'] = np.where(df['消費金額'] > 1000, 'VIP', '普通')`
對于字符串類型的列,可以通過.str訪問器使用豐富的字符串方法。`python
# 假設‘姓名’列,提取姓氏(假設為第一個字符)
df['姓氏'] = df['姓名'].str[0]
# 分割地址信息
df['城市'] = df['地址'].str.split('市').str[0]`
如果數據包含日期時間列,可以通過.dt訪問器提取豐富信息。`python
df['訂單年份'] = df['訂單日期'].dt.year
df['訂單月份'] = df['訂單日期'].dt.month
df['星期幾'] = df['訂單日期'].dt.day_name()`
為了幫助您將上述理論付諸實踐,我們準備了一份模擬的電商訂單數據集(sample<em>sales</em>data.csv),其中包含:order<em>id(訂單ID)、customer</em>id(客戶ID)、product(產品)、quantity(數量)、unit<em>price(單價)、order</em>date(訂單日期)等字段。
您的數據分析與處理任務如下:
1. 加載數據,并檢查數據概覽與缺失值。
2. 計算每個訂單的total<em>amount(總金額 = 數量 * 單價)。
3. 基于total</em>amount,創建一個新列order<em>size,規則為:總金額>500為“大單”,100-500之間為“中單”,小于100為“小單”。
4. 從order</em>date中提取order<em>year和order</em>quarter(季度)字段。
5. 計算每個客戶的總消費金額,并創建新列customer_type,總消費>2000的標記為“高價值客戶”。
示例代碼框架:`python
import pandas as pd
import numpy as np
df = pd.readcsv('samplesalesdata.csv', parsedates=['order_date'])
print(df.info())
print(df.head())
df['totalamount'] = df['quantity'] * df['unitprice']
conditions = [
df['totalamount'] > 500,
(df['totalamount'] >= 100) & (df['totalamount'] <= 500),
df['totalamount'] < 100
]
choices = ['大單', '中單', '小單']
df['order_size'] = np.select(conditions, choices, default='未知')
df['orderyear'] = df['orderdate'].dt.year
df['orderquarter'] = df['orderdate'].dt.quarter
customertotal = df.groupby('customerid')['totalamount'].sum().resetindex()
customertotal.rename(columns={'totalamount': 'customerlifetimevalue'}, inplace=True)
df = pd.merge(df, customertotal, on='customerid', how='left')
df['customertype'] = np.where(df['customerlifetime_value'] > 2000, '高價值客戶', '一般客戶')
print(df[['orderid', 'customerid', 'totalamount', 'ordersize', 'orderyear', 'customertype']].head())`
###
通過pandas進行數據清洗、分析與字段創建,是一個將原始數據轉化為高價值信息流的系統過程。掌握這些技能,不僅能提升數據治理的效率與質量,更能為深度分析和機器學習模型構建打下堅實的基礎。建議讀者下載提供的示例數據,親自動手運行和修改上述代碼,在實踐中深化理解,從而在面對真實、復雜的數據挑戰時游刃有余。
(注:示例數據文件可通過提供的鏈接或附件下載。)
如若轉載,請注明出處:http://www.vjhgm.cn/product/74.html
更新時間:2026-02-17 10:34:44