Pandas 常用操作速查手册
📦 导入和创建
import pandas as pd
import numpy as np
# 创建 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': ['a', 'b', 'c', 'd'],
'C': [1.1, 2.2, 3.3, 4.4]
})
# 创建 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
# 从字典创建(指定索引)
df = pd.DataFrame({
'col1': [1, 2],
'col2': [3, 4]
}, index=['row1', 'row2'])
📂 数据读取和保存
# CSV 文件
df = pd.read_csv('file.csv')
df = pd.read_csv('file.csv', encoding='utf-8') # 指定编码
df = pd.read_csv('file.csv', sep='\t') # 指定分隔符
df.to_csv('output.csv', index=False) # 保存(不保存索引)
# Excel 文件
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
df.to_excel('output.xlsx', index=False)
# JSON 文件
df = pd.read_json('file.json')
df.to_json('output.json')
# SQL 数据库
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table', conn)
df.to_sql('table_name', conn, if_exists='replace')
👀 数据查看
# 基本信息
df.head() # 前5行
df.head(10) # 前10行
df.tail() # 后5行
df.sample(5) # 随机5行
# 数据概览
df.shape # (行数, 列数)
df.info() # 数据类型、非空值数量
df.describe() # 数值列的统计摘要
df.dtypes # 每列的数据类型
df.columns # 列名
df.index # 索引
# 统计信息
df.count() # 非空值数量
df.mean() # 平均值
df.median() # 中位数
df.std() # 标准差
df.min() # 最小值
df.max() # 最大值
df.sum() # 求和
df.value_counts() # Series 的值计数
🔍 数据选择和索引
选择列
df['A'] # 选择单列(返回 Series)
df[['A', 'B']] # 选择多列(返回 DataFrame)
df.A # 通过属性访问(不推荐用于有空格的列名)
选择行
# 基于位置 - iloc
df.iloc[0] # 第一行
df.iloc[0:3] # 前3行
df.iloc[[0, 2, 4]] # 特定行
df.iloc[:, 0:2] # 所有行,前2列
# 基于标签 - loc
df.loc[0] # 索引为0的行
df.loc[0:3] # 索引0到3(包括3)
df.loc[:, 'A':'C'] # 所有行,列A到C
df.loc[df['A'] > 2] # 条件筛选
条件筛选
# 单条件
df[df['A'] > 2]
df[df['B'] == 'a']
# 多条件(与)
df[(df['A'] > 2) & (df['B'] == 'a')]
# 多条件(或)
df[(df['A'] > 2) | (df['B'] == 'a')]
# 取反
df[~(df['A'] > 2)]
# isin 方法
df[df['B'].isin(['a', 'b'])]
# 字符串包含
df[df['B'].str.contains('a')]
# 查询语法(更简洁)
df.query('A > 2 and B == "a"')
🔧 数据清洗
缺失值处理
# 检查缺失值
df.isnull() # 返回布尔 DataFrame
df.isnull().sum() # 每列缺失值数量
df.isnull().any() # 每列是否有缺失值
# 删除缺失值
df.dropna() # 删除任何包含缺失值的行
df.dropna(axis=1) # 删除任何包含缺失值的列
df.dropna(how='all') # 删除全为缺失值的行
df.dropna(thresh=2) # 保留至少有2个非空值的行
# 填充缺失值
df.fillna(0) # 用0填充
df.fillna(method='ffill') # 前向填充
df.fillna(method='bfill') # 后向填充
df['A'].fillna(df['A'].mean()) # 用平均值填充
重复值处理
# 检查重复
df.duplicated() # 返回布尔 Series
df.duplicated().sum() # 重复行数量
# 删除重复
df.drop_duplicates() # 删除重复行(保留第一次出现)
df.drop_duplicates(keep='last') # 保留最后一次出现
df.drop_duplicates(subset=['A']) # 基于特定列判断重复
数据类型转换
# 转换单列
df['A'] = df['A'].astype(int)
df['B'] = df['B'].astype(str)
df['C'] = pd.to_numeric(df['C'], errors='coerce') # 无法转换的设为 NaN
# 转换多列
df = df.astype({'A': int, 'B': str})
# 日期时间转换
df['date'] = pd.to_datetime(df['date'])