🐼 Pandas 超能速通:从“import pandas as pd”到“一行出图”一次搞定!

56 阅读2分钟

还在裸写 Python 循环统计?
今天 10 分钟,把 Pandas 磨成数据分析瑞士军刀🔪——
DataFrame × 向量化 × 透视表 × 一行画图 全套带走!

微信图片_20251014151033_10_20.jpg

1️⃣ 安装 & 全球统一暗号

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
import pandas as pd
import numpy as np

2️⃣ 两种核心数据结构:一眼记住👀

维度名称类比常用属性
1DSeries带索引的数组s.index s.values
2DDataFrame电子表格df.columns df.index df.shape
s = pd.Series([1, 3, 5], index=['a', 'b', 'c'])
df = pd.DataFrame({'name': ['Tom', 'Jerry'], 'age': [20, 21]})

3️⃣ 读取数据:一键 CSV / Excel / SQL💡

# CSV
df = pd.read_csv('data.csv', parse_dates=['日期'], dtype={'销量': int})

# Excel
df = pd.read_excel('sale.xlsx', sheet_name='2024', usecols=['A:C'])

# SQL
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:pwd@host/db')
df = pd.read_sql('SELECT * FROM orders', engine)

4️⃣ 10 个必备速查命令(80% 时间用它们)📊

df.head()           # 默认前 5 行
df.info()           # 列类型 + 非空计数
df.describe()       # 数值统计
df['col'].value_counts()  # 分类计数
df.isna().sum()     # 缺失值
df.dropna()         # 删空
df.fillna(0)        # 填 0
df.sort_values('销量', ascending=False)
df.groupby('城市')['销量'].sum()
df.drop_duplicates()

5️⃣ 新增 / 筛选 / 排序:向量化速度×40⚡️

# 新增列
df['利润'] = df['销售额'] - df['成本']
df['级别'] = df['利润'].apply(lambda x: '高' if x > 100 else '低')

# 布尔索引
high = df[df['利润'] > 100]

# 多条件
df[(df['城市'] == '上海') & (df['利润'] > 50)]

6️⃣ 合并数据:SQL 爱好者福音🎉

# 横向拼接
pd.concat([df1, df2], axis=0, ignore_index=True)

# 横向连接
pd.merge(df_order, df_city, on='城市ID', how='left')

# 透视表 = 行列汇总
pd.pivot_table(df, values='销量', index='月份', columns='城市', aggfunc='sum')

7️⃣ 时间序列:Pandas 的“主场”📅

df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
df_month = df.resample('M').sum()  # 按月聚合
df['同比'] = df['销量'].pct_change(periods=12)  # 同比 %

8️⃣ 一行出图:pandas 内置绘图🎨

import matplotlib.pyplot as plt

df.groupby('月份')['销量'].sum().plot(kind='bar', figsize=(6, 3))
plt.title('月度销量')
plt.show()

底层走的 Matplotlib,Seaborn 也能直接吃 DataFrame!


9️⃣ 性能小贴士:加速 3 连招🚀

技巧代码效果
向量化df['新'] = df['a'] * 2比 apply 快 40 倍
分块for chunk in pd.read_csv(..., chunksize=1e5):内存占 ↓10 倍
类型指定dtype={'ID': 'string'}读入即省 30% 内存

🔟 易错点 Top5⚠️

错误示范正确
链式赋值警告df[df['a']>0]['b']=1df.loc[df['a']>0, 'b'] = 1
日期没转直接字符串排序pd.to_datetime
空值参与计算df['col'].sum() 意外 NAdropna / fillna
索引重复df.merge 后行数爆炸drop_duplicates
大文件一次性读内存爆炸chunksizeusecols

🏁 口诀总结(背它!)

“read 读数据,head 看结构;
loc 精准选,group 聚合快;
缺失 fillna,时间 resample;
**一行 plot 出图,搞定数据分析路!”**🎵