一、Pandas基礎入門
1.1 什么是Pandas
Pandas是Python生態中核心的數據分析庫,提供高效的數據結構(Series/DataFrame)和數據分析工具。其名稱源于"Panel Data"(面板數據)和"Python Data Analysis"的組合,由Wes McKinney于2008年開發,現已成為數據科學領域的標準工具。
1.2 核心數據結構
1.2.1 Series:一維標記數組
import pandas as pd
s = pd.Series([5, 2, 3], index=['A', 'B', 'C'])
- 特性:類似帶標簽的NumPy數組
- 操作:
s['A']
獲取值,s + 2
向量運算
1.2.2 DataFrame:二維表格結構
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['NY', 'SF', 'LA']
})
- 特性:支持異構數據類型,類似Excel表格
- 核心屬性:
df.shape
,df.dtypes
,df.columns
二、數據加載與輸出
2.1 數據導入
# CSV文件
df = pd.read_csv('data.csv', parse_dates=['date_column'])# Excel文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')# JSON數據
df = pd.read_json('data.json', orient='records')
- 高級參數:
skiprows
,nrows
,chunksize
(分塊讀取)
2.2 數據導出
df.to_csv('cleaned_data.csv', index=False, encoding='utf-8')
df.to_excel('report.xlsx', sheet_name='Results')
三、數據清洗核心技巧
3.1 缺失值處理
3.1.1 檢測缺失值
df.isnull().sum() # 各列缺失值統計
3.1.2 處理策略
# 刪除缺失值
df.dropna(subset=['Age'], inplace=True)# 填充缺失值
df['Salary'].fillna(df['Salary'].mean(), inplace=True)
3.2 數據去重
# 檢測重復行
df.duplicated().sum()# 刪除重復行
df.drop_duplicates(subset=['ID'], keep='last', inplace=True)
3.3 數據類型轉換
df['BirthDate'] = pd.to_datetime(df['BirthDate'], format='%Y-%m-%d')
df['Category'] = df['Category'].astype('category')
四、數據選擇與過濾
4.1 基礎索引
# 選擇列
df[['Name', 'Age']]# 選擇行(前5行)
df.head()
4.2 高級索引
4.2.1 loc標簽索引
df.loc[df['Age'] > 30, ['Name', 'City']]
4.2.2 iloc位置索引
df.iloc[1:4, 0:2] # 選取2-4行,1-2列
4.2.3 布爾索引
mask = (df['Score'] >= 80) & (df['Attempts'] < 5)
df[mask]
五、數據操作與轉換
5.1 列操作
# 添加新列
df['Salary'] = df['Salary'] * 1.1 # 漲薪10%# 刪除列
df.drop('TempColumn', axis=1, inplace=True)# 重命名列
df.rename(columns={'OldName': 'NewName'}, inplace=True)
5.2 數據合并
5.2.1 橫向合并
pd.merge(df1, df2, on='ID', how='inner') # 支持inner/left/right/outer
5.2.2 縱向合并
pd.concat([df1, df2], axis=0, ignore_index=True)
5.3 分組聚合
df.groupby('Department')['Salary'].agg(['mean', 'sum'])
六、高級功能應用
6.1 時間序列處理
# 創建時間范圍
dates = pd.date_range('20250101', periods=365)# 重采樣
df.resample('M').mean() # 月度重采樣# 滑動窗口
df['RollingMean'] = df['Value'].rolling(window=7).mean()
6.2 文本處理
# 字符串方法
df['Name'].str.upper()# 正則表達式
df['Email'].str.extract(r'(\w+)@(\w+\.com)')
6.3 數據可視化集成
import matplotlib.pyplot as pltdf['Age'].plot(kind='hist', bins=10)
plt.savefig('age_distribution.png')
七、性能優化技巧
7.1 內存優化
# 修改數據類型
df['ID'] = df['ID'].astype('int32')# 分類數據類型
df['Category'] = df['Category'].astype('category')
7.2 向量化操作
# 避免循環,使用內置函數
df['NewCol'] = df['Col1'] + df['Col2']
7.3 分塊處理
chunk_iter = pd.read_csv('big_data.csv', chunksize=10000)
for chunk in chunk_iter:process(chunk)
八、實戰案例:電商數據分析
8.1 案例背景
分析某電商平臺用戶行為數據,包含:
- 用戶ID、商品ID、購買數量、金額、時間戳
8.2 數據預處理
# 轉換時間戳
df['OrderTime'] = pd.to_datetime(df['OrderTime'])# 計算客單價
df['UnitPrice'] = df['Amount'] / df['Quantity']
8.3 深度分析
# 用戶購買周期分析
df.groupby('UserID')['OrderTime'].diff().mean()# 商品關聯分析
pd.crosstab(df['ProductA'], df['ProductB'])
8.4 結果可視化
import seaborn as snssns.boxplot(x='Category', y='Sales', data=df)
plt.title('Category Sales Distribution')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('sales_analysis.png')
九、學習資源推薦
官方文檔:https://pandas.pydata.org/docs/
實戰書籍:《利用Python進行數據分析》
練習平臺:Kaggle、DataCamp
進階資源:Dask(并行計算)、Modin(分布式Pandas)