# Pandas的功能及用法
## 一、Pandas概述
### 1.1 什么是Pandas
Pandas是一個開源的Python數據分析庫,提供了高性能、易用的數據結構和數據分析工具。名稱"Pandas"源自"Panel Data"(面板數據)和"Python Data Analysis"(Python數據分析)的組合。由Wes McKinney于2008年開發,現已成為Python數據科學生態系統的核心組件。
### 1.2 主要特點
- **DataFrame結構**:類似電子表格的二維數據結構
- **時間序列處理**:強大的日期/時間功能
- **數據清洗**:處理缺失值、異常值等
- **數據整合**:合并、連接、重塑數據集
- **高效I/O**:支持多種文件格式讀寫
- **分組聚合**:靈活的數據分組和聚合操作
### 1.3 安裝與導入
```python
# 安裝
pip install pandas
# 常規導入方式
import pandas as pd
一維帶標簽數組,可存儲任何數據類型
# 創建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
# 基本操作
print(s.index) # 獲取索引
print(s.values) # 獲取值
print(s[2]) # 索引訪問
二維表格型數據結構,類似電子表格或SQL表
# 創建DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['NY', 'LA', 'Chicago']}
df = pd.DataFrame(data)
# 查看基本信息
print(df.shape) # 維度
print(df.columns) # 列名
print(df.dtypes) # 數據類型
格式類型 | 讀取方法 | 寫入方法 |
---|---|---|
CSV | pd.read_csv() | df.to_csv() |
Excel | pd.read_excel() | df.to_excel() |
JSON | pd.read_json() | df.to_json() |
SQL | pd.read_sql() | df.to_sql() |
HTML | pd.read_html() | df.to_html() |
# 讀取CSV
df = pd.read_csv('data.csv', encoding='utf-8')
# 讀取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 寫入文件
df.to_csv('output.csv', index=False)
df.head() # 前5行
df.tail(3) # 后3行
df.sample(5) # 隨機5行
df.describe() # 統計摘要
df.info() # 內存和類型信息
df.loc[0] # 選擇第一行
df.loc[:, 'Name'] # 選擇Name列
df.loc[0:2, 'Name':'Age'] # 行和列切片
df.iloc[0] # 第一行
df.iloc[:, 1] # 第二列
df.iloc[0:2, 1:3] # 行列切片
df[df['Age'] > 30] # 年齡大于30
df[(df.Age > 25) & (df.City == 'NY')] # 多條件
# 檢測缺失值
df.isnull().sum()
# 處理方法
df.dropna() # 刪除含缺失值的行
df.fillna(0) # 用0填充
df.fillna(df.mean()) # 用均值填充
df['Age'] = df['Age'].astype('float') # 轉為浮點型
pd.to_datetime(df['Date']) # 轉為日期類型
df.duplicated() # 檢測重復行
df.drop_duplicates() # 刪除重復行
df.replace({'NY': 'New York'}, inplace=True) # 值替換
df['Gender'].map({'M': 'Male', 'F': 'Female'}) # 映射替換
df.sort_values('Age', ascending=False) # 按年齡降序
df.sort_index(ascending=True) # 按索引排序
df['NewCol'] = df['Age'] * 2 # 添加新列
df.drop('NewCol', axis=1) # 刪除列
# 簡單透視表
pd.pivot_table(df, values='Age', index='City', aggfunc='mean')
# 復雜透視表
pd.pivot_table(df, values=['Age','Salary'],
index=['City','Gender'],
aggfunc={'Age':'mean', 'Salary':'sum'})
# 縱向合并
pd.concat([df1, df2], axis=0)
# 橫向合并
pd.concat([df1, df2], axis=1)
# SQL風格合并
pd.merge(left, right, on='key', how='inner')
grouped = df.groupby('City') # 按城市分組
grouped.groups # 查看分組
# 單列聚合
df.groupby('City')['Age'].mean()
# 多列多聚合
df.groupby('City').agg({
'Age': ['mean', 'max', 'min'],
'Salary': 'sum'
})
# 分組標準化
df['zscore'] = df.groupby('City')['Age'].transform(
lambda x: (x - x.mean()) / x.std()
)
# 分組過濾
df.groupby('City').filter(lambda x: x['Age'].mean() > 30)
# 創建時間序列
dates = pd.date_range('20230101', periods=6)
ts = pd.Series(np.random.randn(6), index=dates)
ts['2023-01'] # 選擇1月數據
ts.truncate(before='2023-01-03') # 截斷數據
ts.resample('M').mean() # 按月重采樣
ts.shift(2) # 向后移動2天
ts.tshift(freq='M') # 移動索引
避免循環,使用內置方法:
# 差的方式
for i in range(len(df)):
df.loc[i, 'NewCol'] = df.loc[i, 'Age'] * 2
# 好的方式
df['NewCol'] = df['Age'] * 2
# 查看內存使用
df.memory_usage(deep=True)
# 優化類型
df['Category'] = df['Category'].astype('category')
# 分塊讀取
chunk_iter = pd.read_csv('large.csv', chunksize=10000)
for chunk in chunk_iter:
process(chunk)
df.plot() # 線圖
df.plot.scatter(x='Age', y='Salary') # 散點圖
df['Age'].plot.hist(bins=20) # 直方圖
# 使用Seaborn集成
import seaborn as sns
sns.boxplot(x='City', y='Age', data=df)
# 多子圖
df.plot(subplots=True, figsize=(10, 12))
# 讀取數據
sales = pd.read_excel('sales_data.xlsx')
# 分析月銷售額
sales['Date'] = pd.to_datetime(sales['Date'])
monthly_sales = sales.resample('M', on='Date')['Amount'].sum()
# 可視化
monthly_sales.plot(kind='bar')
# 計算用戶留存
user_activity['date'] = pd.to_datetime(user_activity['timestamp']).dt.date
retention = user_activity.groupby('user_id')['date'].nunique()
# 留存率統計
(retention > 1).mean() # 7日留存率
dtype
參數指定類型category
類型減少字符串存儲chardet
檢測文件編碼Pandas持續更新中,2.0版本帶來了更好的性能、更豐富的類型系統等改進。建議關注: - 性能優化(特別是大數據處理) - 與其他生態系統的集成 - 新功能的持續加入
本文共約4300字,全面介紹了Pandas的核心功能和使用方法,從基礎數據結構到高級分析技巧,涵蓋了數據處理的完整流程。通過實際代碼示例展示了Pandas的強大功能,是Python數據分析的必備工具。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。