🐼 Pandas 命令手册(Command Reference Guide)

“DataFrame 就像 Excel + SQL + Python 的孩子,天生会玩数据。”

📦 一、导入与基础

import pandas as pd
import numpy as np

读取文件

pd.read_csv('data.csv')                 # 读取 CSV
pd.read_excel('data.xlsx', sheet_name=0)
pd.read_json('data.json')

写出文件

df.to_csv('out.csv', index=False)
df.to_excel('out.xlsx', index=False)

查看信息

df.head(5)              # 前5行
df.tail(3)              # 后3行
df.shape                # 行数, 列数
df.info()               # 概要信息
df.describe()           # 统计摘要
df.dtypes               # 各列类型
df.columns              # 列名

🔍 二、选择与索引

按列取值

df['col']                  # 单列(Series)
df[['col1', 'col2']]       # 多列(DataFrame)

按行 / 标签 / 位置

df.loc[2]                  # 取索引标签为2的行
df.iloc[2]                 # 取第3行
df.loc[2:5, ['A','B']]     # 按标签选
df.iloc[:3, :2]            # 按位置选

条件过滤

df[df['age'] > 30]
df[(df['age']>30) & (df['city']=='Beijing')]
df[df['name'].str.contains('Li')]

排序

df.sort_values('age', ascending=False)
df.sort_index(ascending=True)

🧱 三、列操作

df['new'] = df['A'] + df['B']         # 新列 = A + B
df['log'] = np.log1p(df['value'])     # 对数变换
df.drop('col', axis=1, inplace=True)  # 删除列
df.rename(columns={'old':'new'})      # 重命名
df['age'] = df['age'].astype(int)     # 类型转换

🕳 四、缺失值处理

检测

df.isnull().sum()           # 每列缺失个数
df.notnull()                # 非缺失

填充

df['col'].fillna(0)
df.fillna(df.mean())        # 均值填充
df.fillna({'age':30})
df.ffill()                  # 前向填补
df.bfill()                  # 后向填补

删除

df.dropna()                 # 删除含缺失的行
df.dropna(axis=1)           # 删除含缺失的列

🔁 五、重复与唯一

df.duplicated()             # 检测重复
df.drop_duplicates()        # 删除重复行
df['col'].unique()          # 唯一值
df['col'].nunique()         # 唯一个数

📊 六、分组与聚合

df.groupby('city')['income'].mean()
df.groupby(['city','gender']).agg({'age':'mean','income':'sum'})
df.groupby('dept').size()               # 计数

命名聚合结果

df.groupby('city').agg(
    avg_age=('age','mean'),
    total_income=('income','sum')
)

🔗 七、合并与拼接

concat 拼接

pd.concat([df1, df2], axis=0)          # 按行拼
pd.concat([df1, df2], axis=1)          # 按列拼

merge 合并(类 SQL)

pd.merge(df1, df2, on='id', how='left')

join 合并(按索引)

df1.join(df2, how='inner')

📈 八、透视表 / 交叉表

pd.pivot_table(df, values='sales',
               index='city', columns='year',
               aggfunc='sum')
pd.crosstab(df['gender'], df['city'])

🧩 九、字符串操作(str)

df['name'].str.lower()
df['name'].str.strip()
df['email'].str.split('@').str[1]
df['city'].str.contains('Bei')
df['id'].str.replace('-','')

🕒 十、日期时间操作

df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['weekday'] = df['date'].dt.dayofweek
df['is_weekend'] = (df['weekday']>=5).astype(int)

重采样

df.resample('M').mean()     # 月均值
df.resample('W').sum()      # 周和

🧮 十一、统计分析

df['age'].mean()
df['salary'].median()
df['city'].value_counts()
df.corr()                   # 相关矩阵
df['income'].quantile(0.9)
df['score'].clip(0,100)

🧠 十二、apply / map / lambda

df['double'] = df['age'].apply(lambda x: x*2)
df['code'] = df['city'].map({'Beijing':1, 'Shanghai':2})
df.apply(np.sum, axis=0)    # 对列求和

💾 十三、导出保存

df.to_csv('result.csv', index=False)
df.to_excel('result.xlsx')
df.to_json('data.json', orient='records')

⚙️ 十四、实用技巧

df.memory_usage(deep=True)              # 内存使用
df.astype({'col':'category'})           # 转为分类类型
df.query('age>30 and city=="Beijing"')  # 类SQL查询
df.sample(frac=0.1, random_state=1)     # 抽样10%
df.nlargest(5, 'salary')                # 前5名

🎨 十五、快速可视化

df['age'].plot.hist(bins=20)
df.plot.scatter(x='age', y='income')
df.groupby('city')['salary'].mean().plot(kind='bar')

🧭 十六、典型工作流

# 1. 读入数据
df = pd.read_csv('data.csv')

# 2. 检查数据
df.info(); df.describe()

# 3. 缺失/异常处理
df.fillna(df.median(), inplace=True)
df = df[df['age'] < 90]

# 4. 特征工程
df['income_log'] = np.log1p(df['income'])
df['age_group'] = pd.cut(df['age'], bins=[0,18,35,60,120], labels=False)

# 5. 聚合统计
summary = df.groupby('city')['income'].agg(['mean','max','count'])

# 6. 可视化结果
summary['mean'].plot(kind='bar')

✨ 小贴士

  • loc 用标签,iloc 用位置。
  • inplace=True 会原地修改,不返回副本。
  • Pandas 对 列操作快,对行循环慢
  • 链式赋值df['x'][mask] = ...)要小心,会触发警告。
  • df.query() / df.eval() 能让表达式更简洁、性能更好。

添加新评论