Python數(shù)據(jù)分析Pandas全攻略
一、簡介
Python 的 pandas 庫是數(shù)據(jù)分析的核心工具,專門處理結(jié)構(gòu)化數(shù)據(jù)(如表格、時(shí)間序列等)。
二、安裝與導(dǎo)入
1. 安裝
pip install pandas
2. 導(dǎo)入
import pandas as pd # 行業(yè)標(biāo)準(zhǔn)縮寫
三、核心數(shù)據(jù)結(jié)構(gòu)
1.Series- 一維帶標(biāo)簽
# 創(chuàng)建 Series s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']) print(s)
a 10 b 20 c 30 d 40 dtype: int64
2.DataFrame- 二維表格(核心)
# 創(chuàng)建 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Paris', 'London']
}
df = pd.DataFrame(data)
print(df)Name Age City 0 Alice 25 New York 1 Bob 30 Paris 2 Charlie 35 London
四、數(shù)據(jù)讀寫
1. 讀取數(shù)據(jù)(支持多種格式)
# 讀取 CSV
df = pd.read_csv('data.csv', encoding='utf-8')
# 讀取 Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 讀取 JSON(與之前學(xué)習(xí)的 json 庫結(jié)合)
df = pd.read_json('data.json')2. 保存數(shù)據(jù)
# 保存為 CSV
df.to_csv('output.csv', index=False) # 不保存行索引
# 保存為 Excel
df.to_excel('output.xlsx', sheet_name='Results')五、數(shù)據(jù)探索
1. 查看數(shù)據(jù)
| 方法 | 作用 | 示例 |
|---|---|---|
df.head(n) | 查看前n行 | df.head(3) |
df.tail(n) | 查看后n行 | df.tail(2) |
df.info() | 顯示數(shù)據(jù)概覽 | df.info() |
df.describe() | 統(tǒng)計(jì)數(shù)值列 | df.describe() |
2. 選擇數(shù)據(jù)
# 選擇列 ages = df['Age'] # 返回 Series name_city = df[['Name', 'City']] # 返回 DataFrame # 選擇行 row_1 = df.iloc[0] # 通過位置選擇 row_bob = df.loc[df['Name'] == 'Bob'] # 通過條件選擇 # 切片 subset = df[1:3] # 第2-3行(左閉右開)
六、數(shù)據(jù)清洗
1. 處理缺失值
# 檢測缺失值
print(df.isnull())
# 刪除含缺失值的行
df_clean = df.dropna()
# 填充缺失值
df_filled = df.fillna({'Age': df['Age'].mean()}) # 用平均值填充年齡列2. 去重
df_unique = df.drop_duplicates(subset=['Name']) # 根據(jù)姓名去重
3. 類型轉(zhuǎn)換
df['Age'] = df['Age'].astype(float) # 轉(zhuǎn)換為浮點(diǎn)型
七、數(shù)據(jù)分析
1. 過濾數(shù)據(jù)
# 篩選年齡 > 25 的記錄 adults = df[df['Age'] > 25] # 復(fù)合條件(注意用 & 代替 and) young_in_paris = df[(df['Age'] < 30) & (df['City'] == 'Paris')]
2. 分組聚合
# 按城市分組,計(jì)算平均年齡
city_stats = df.groupby('City')['Age'].mean()
print(city_stats)City London 35.0 New York 25.0 Paris 30.0 Name: Age, dtype: float64
3. 排序
df_sorted = df.sort_values(by='Age', ascending=False) # 按年齡降序
八、數(shù)據(jù)合并
1. 橫向合并(類似 SQL JOIN)
df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['A', 'B']})
df2 = pd.DataFrame({'ID': [2, 3], 'Age': [25, 30]})
# 內(nèi)連接
merged = pd.merge(df1, df2, on='ID', how='inner')2. 縱向合并(類似 SQL UNION)
combined = pd.concat([df1, df2], axis=0) # axis=0 表示行方向
九、時(shí)間序列處理
# 創(chuàng)建時(shí)間序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D')
ts = pd.Series([10, 20, 15, 30, 25], index=date_rng)
# 重采樣(按周計(jì)算平均值)
weekly_avg = ts.resample('W').mean()十、可視化(需安裝 matplotlib)
import matplotlib.pyplot as plt
# 繪制年齡分布直方圖
df['Age'].plot(kind='hist', bins=5)
plt.title('Age Distribution')
plt.show()十一、常見錯(cuò)誤處理
1.KeyError
# 檢查列名是否存在
if 'Salary' in df.columns:
print(df['Salary'])2. 內(nèi)存不足
使用
df.info(memory_usage='deep')查看內(nèi)存占用用
df.select_dtypes(include='number')選擇數(shù)值列處理
十二、完整工作流示例
# 1. 讀取數(shù)據(jù)
df = pd.read_csv('sales.csv')
# 2. 數(shù)據(jù)清洗
df = df.dropna(subset=['Price'])
df['Date'] = pd.to_datetime(df['Date'])
# 3. 分析
monthly_sales = df.groupby(pd.Grouper(key='Date', freq='M'))['Price'].sum()
# 4. 可視化
monthly_sales.plot(kind='bar')
plt.title('Monthly Sales')
plt.show()十三、常用函數(shù)
1、數(shù)據(jù)讀取與保存
| 函數(shù) | 作用 | 示例 |
|---|---|---|
pd.read_csv() | 讀取 CSV 文件 | df = pd.read_csv('data.csv') |
pd.read_excel() | 讀取 Excel 文件 | df = pd.read_excel('data.xlsx') |
pd.read_json() | 讀取 JSON 文件 | df = pd.read_json('data.json') |
df.to_csv() | 保存為 CSV | df.to_csv('output.csv', index=False) |
df.to_excel() | 保存為 Excel | df.to_excel('output.xlsx') |
2、數(shù)據(jù)查看與篩選
| 函數(shù)/方法 | 作用 | 示例 |
|---|---|---|
df.head(n) | 查看前 n 行 | df.head(5) |
df.tail(n) | 查看后 n 行 | df.tail(3) |
df.info() | 顯示數(shù)據(jù)信息(列名、類型、非空值) | df.info() |
df.describe() | 統(tǒng)計(jì)數(shù)值列的基本統(tǒng)計(jì)量 | df.describe() |
df.shape | 獲取 DataFrame 的維度 | print(df.shape) → 輸出 (行數(shù), 列數(shù)) |
df.columns | 獲取所有列名 | df.columns.tolist() |
df.loc[] | 標(biāo)簽索引選擇數(shù)據(jù) | df.loc[2, 'Age'] → 選擇第3行的Age列 |
df.iloc[] | 位置索引選擇數(shù)據(jù) | df.iloc[0:3, 1:4] → 選擇前3行,第2-4列 |
df.query() | 用表達(dá)式篩選數(shù)據(jù) | df.query('Age > 30 & City == "London"') |
3、數(shù)據(jù)清洗
| 函數(shù)/方法 | 作用 | 示例 |
|---|---|---|
df.dropna() | 刪除缺失值 | df.dropna(subset=['Age']) |
df.fillna() | 填充缺失值 | df.fillna({'Age': df['Age'].mean()}) |
df.drop_duplicates() | 刪除重復(fù)行 | df.drop_duplicates(subset=['Name']) |
df.rename() | 重命名列 | df.rename(columns={'old':'new'}) |
df.astype() | 轉(zhuǎn)換數(shù)據(jù)類型 | df['Age'] = df['Age'].astype(int) |
df.replace() | 替換特定值 | df.replace({'Male':'M', 'Female':'F'}) |
4、數(shù)據(jù)分析
| 函數(shù)/方法 | 作用 | 示例 |
|---|---|---|
df.groupby() | 分組聚合 | df.groupby('City')['Sales'].sum() |
df.pivot_table() | 創(chuàng)建數(shù)據(jù)透視表 | pd.pivot_table(df, values='Sales', index='Region', columns='Year') |
df.sort_values() | 按值排序 | df.sort_values('Age', ascending=False) |
df.value_counts() | 統(tǒng)計(jì)唯一值頻次 | df['City'].value_counts() |
df.corr() | 計(jì)算列之間的相關(guān)系數(shù) | df.corr() |
df.merge() | 合并兩個(gè) DataFrame | pd.merge(df1, df2, on='ID') |
pd.concat() | 拼接 DataFrame | pd.concat([df1, df2], axis=0) |
5、數(shù)據(jù)操作
| 函數(shù)/方法 | 作用 | 示例 |
|---|---|---|
df.apply() | 對(duì)列/行應(yīng)用函數(shù) | df['Age'].apply(lambda x: x + 1) |
df.map() | 對(duì) Series 元素映射轉(zhuǎn)換 | df['Gender'].map({'M':1, 'F':0}) |
df.assign() | 創(chuàng)建新列 | df.assign(Income = df['Salary']*12) |
df.drop() | 刪除列或行 | df.drop(columns=['Temp']) |
df.where() | 條件篩選(保留滿足條件的值) | df.where(df['Age'] > 18) |
df.melt() | 寬表轉(zhuǎn)長表 | df.melt(id_vars=['Name']) |
到此這篇關(guān)于Python數(shù)據(jù)分析Pandas全攻略的文章就介紹到這了,更多相關(guān)Python Pandas安裝導(dǎo)入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
卷積神經(jīng)網(wǎng)絡(luò)如何實(shí)現(xiàn)提取特征
這篇文章主要介紹了卷積神經(jīng)網(wǎng)絡(luò)如何實(shí)現(xiàn)提取特征問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Python簡單網(wǎng)絡(luò)編程示例【客戶端與服務(wù)端】
這篇文章主要介紹了Python簡單網(wǎng)絡(luò)編程,詳細(xì)介紹了客戶端與服務(wù)端的具體實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05
Python+Matplotlib實(shí)現(xiàn)繪制三維折線圖
立體圖視覺上層次分明色彩鮮艷,具有很強(qiáng)的視覺沖擊力,讓觀看的人駐景時(shí)間長,留下深刻的印象。今天我們就通過這篇文章來了解如何用python中的matplotlib庫繪制漂亮的三維折線圖吧2023-03-03
Python使用Nocalhost并開啟debug調(diào)試的方法
Nocalhost是一種開發(fā)者工具,支持針對(duì)Kubernetes應(yīng)用程序進(jìn)行調(diào)試和部署,這篇文章主要介紹了Python怎么使用Nocalhost并開啟debug,需要的朋友可以參考下2023-04-04
Python字符串逆序的實(shí)現(xiàn)方法【一題多解】
今天小編就為大家分享一篇關(guān)于Python字符串逆序的實(shí)現(xiàn)方法【一題多解】,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02

