Pandas速查手册

1. 数据创建与读取 (Data I/O)

函数 / 方法 功能说明 核心参数说明 代码示例
pd.DataFrame() 创建二维数据框表格 data, index, columns, dtype df = pd.DataFrame({'A': [1, 2], 'B': ['x', 'y']})
pd.Series() 创建一维带标签数组 data, index, name, dtype s = pd.Series([10, 20, 30], name='score')
pd.read_csv() 读取 CSV / 文本文件 filepath, sep, encoding, usecols, parse_dates df = pd.read_csv('data.csv', encoding='utf-8', usecols=['id', 'age'])
pd.read_excel() 读取 Excel 工作簿 io, sheet_name, header, usecols, skiprows df = pd.read_excel('sales.xlsx', sheet_name='2023_Q1')
pd.read_sql() 通过 SQL 查询读取数据库数据 sql, con, index_col, params df = pd.read_sql("SELECT * FROM users WHERE age > 18", conn)
pd.read_json() 读取 JSON 格式字符串/文件 path_or_buf, orient, lines df = pd.read_json('data.json', orient='records')

2. 数据探索与概览 (Exploration & Inspection)

函数 / 方法 功能说明 核心参数说明 代码示例
df.head() / df.tail() 查看前 N 行 / 后 N 行数据 n (默认 5) df.head(10)
df.tail(3)
df.info() 打印数据框内存、类型及非空值统计 verbose, memory_usage df.info()
df.describe() 计算数值列描述性统计指标(均值、分位数等) percentiles, include, exclude df.describe(include='all')
df.shape / df.dtypes 查看数据框行列维度 / 各列数据类型 属性(无参数) rows, cols = df.shape
print(df.dtypes)
s.value_counts() 统计序列中各唯一值出现的频次与占比 normalize=True/False, dropna=False, bins df['category'].value_counts(normalize=True)
s.unique() / s.nunique() 获取唯一值数组 / 唯一值数量计数 dropna=True unique_cities = df['city'].unique()
num = df['city'].nunique()

3. 数据选择与筛选 (Indexing & Filtering)

函数 / 方法 功能说明 核心参数说明 代码示例
df['col'] / df[['A','B']] 选择单列(返回 Series)或多列(DataFrame) 列名或列名列表 sub_df = df[['name', 'age', 'gender']]
df.loc[] 根据标签名称进行行列切片与选择 [行标签/条件, 列标签] df.loc[df['age'] > 20, ['name', 'salary']]
df.iloc[] 根据整数位置索引进行切片与选择 [行索引位置, 列索引位置] df.iloc[0:10, 0:3]
布尔逻辑筛选 使用逻辑运算符进行多条件组合筛选 & (与), | (或), ~ (非) df[(df['age'] >= 18) & (df['status'] == 'Active')]
df.query() 使用字符串表达式进行高效条件查询 expr, inplace=False df.query('age > 18 and city in ["BJ", "SH"]')
s.isin() 筛选列值在指定列表/集合中的行 values df[df['department'].isin(['IT', 'HR'])]
s.str.contains() 文本列正则/模糊子串匹配筛选 pat, case=True, regex=True, na=False df[df['email'].str.contains('@gmail\.com$', na=False)]

4. 数据清洗与处理 (Data Cleaning)

函数 / 方法 功能说明 核心参数说明 代码示例
df.isna() / df.notna() 检测是否为缺失值/非缺失值(返回布尔矩阵) null_counts = df.isna().sum()
df.dropna() 删除包含缺失值的行或列 axis, how='any'/'all', subset, thresh df = df.dropna(subset=['user_id', 'email'])
df.fillna() 填充/替换数据中的缺失值 value, method='ffill'/'bfill', axis df['score'] = df['score'].fillna(df['score'].median())
df.drop_duplicates() 查找并删除重复数据行 subset, keep='first'/'last'/False df = df.drop_duplicates(subset=['order_id'], keep='first')
df.rename() 重命名行索引或列名称 mapper, columns, index, inplace df = df.rename(columns={'old_name': 'new_name'})
df.astype() 显式转换序列或全表的数据类型 dtype, copy, errors='raise'/'ignore' df['age'] = df['age'].astype('int64')
df.replace() 替换指定的值或正则表达式匹配项 to_replace, value, regex df['gender'] = df['gender'].replace({'M': 'Male', 'F': 'Female'})

5. 数据转换与衍生列 (Transformation)

函数 / 方法 功能说明 核心参数说明 代码示例
df.apply() 对数据框的行(axis=1)或列(axis=0)应用自定义函数 func, axis, raw, result_type df['total'] = df.apply(lambda r: r['price'] * r['qty'], axis=1)
s.map() 根据字典、函数或映射关系转换 Series 值 arg, na_action df['status_code'] = df['status'].map({'OK': 200, 'ERR': 500})
pd.cut() 将连续数值变量按区间划分为离散分箱(Equal-width) x, bins, labels, right, include_lowest df['age_group'] = pd.cut(df['age'], bins=[0, 18, 60, 100], labels=['Child', 'Adult', 'Senior'])
pd.qcut() 按分位数将连续变量划分为样本量等同的区间(Equal-frequency) x, q, labels df['income_quartile'] = pd.qcut(df['income'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])
df.sort_values() 按照一列或多列的值进行排序 by, ascending, na_position df = df.sort_values(by=['dept', 'salary'], ascending=[True, False])
pd.get_dummies() 将分类变量转换为独热编码(One-Hot / Dummy 变量) data, columns, prefix, drop_first df = pd.get_dummies(df, columns=['category'], drop_first=True)

6. 分组聚合与数据透视 (GroupBy & Pivot)

函数 / 方法 功能说明 核心参数说明 代码示例
df.groupby() 根据指定字段对数据进行拆分分组 by, as_index=True/False, sort grouped = df.groupby('department')
groupby().agg() 对分组后的各字段应用一个或多个聚合操作 func, *args, **kwargs df.groupby('dept').agg({'salary': ['mean', 'max'], 'age': 'median'})
groupby().transform() 计算分组统计量并广播扩展返回与原表同等行数的结果 func df['dept_avg_sal'] = df.groupby('dept')['salary'].transform('mean')
pd.pivot_table() 创建电子表格风格的数据透视表 values, index, columns, aggfunc, fill_value, margins pd.pivot_table(df, values='sales', index='region', columns='year', aggfunc='sum', margins=True)
pd.crosstab() 计算两个或多个因子的频数交叉汇总表 index, columns, values, aggfunc, normalize pd.crosstab(df['gender'], df['passed'], normalize='index')

7. 数据合并与拼接 (Merge & Concatenate)

函数 / 方法 功能说明 核心参数说明 代码示例
pd.merge() 类似 SQL 的主外键多表关联操作 left, right, how='inner'/'left'/'right'/'outer', on, left_on, right_on df_all = pd.merge(df_orders, df_users, on='user_id', how='left')
pd.concat() 沿着纵轴(行)或横轴(列)物理堆叠拼接多个 DataFrame objs, axis=0/1, join='outer'/'inner', ignore_index=True df_combined = pd.concat([df_2022, df_2023], axis=0, ignore_index=True)
df.join() 基于索引 (Index) 快速合并两个 DataFrame other, on, how='left'/'outer', lsuffix, rsuffix df_joined = df1.join(df2, lsuffix='_left', rsuffix='_right')

8. 时间序列处理 (Time Series / DateTime)

函数 / 方法 功能说明 核心参数说明 代码示例
pd.to_datetime() 将文本或数字列转换为标准的 datetime64 类型 arg, format, errors='coerce'/'raise' df['date'] = pd.to_datetime(df['date_str'], format='%Y-%m-%d')
dt 属性访问器 提取日期的年、月、日、星期、季度等属性 .dt.year / .dt.month / .dt.day / .dt.day_name() df['year'] = df['date'].dt.year
df['weekday'] = df['date'].dt.day_name()
pd.date_range() 生成固定频率的连续时间索引/序列 start, end, periods, freq='D'/'M'/'H'/'B' dates = pd.date_range(start='2023-01-01', periods=12, freq='MS')
df.resample() 时间序列重采样(如按月、按周重采样降采样或升采样) rule (‘D’, ‘W’, ‘M’, ‘Q’), on df.set_index('date').resample('M')['sales'].sum()
s.shift() 将序列中的数据向上或向下偏移 N 个周期(常用于计算同比/环比) periods, freq, fill_value df['prev_sales'] = df['sales'].shift(1)
df['growth'] = df['sales'] - df['prev_sales']
s.rolling() 创建滑动窗口以计算移动平均、滑动求和等指标 window, min_periods, center df['ma_7'] = df['sales'].rolling(window=7).mean()

9. 数据输出与导出 (Data Export)

函数 / 方法 功能说明 核心参数说明 代码示例
df.to_csv() 导出数据至 CSV 格式文件 path_or_buf, index=False, encoding='utf-8-sig' df.to_csv('result.csv', index=False, encoding='utf-8-sig')
df.to_excel() 导出数据至 Excel 工作薄 excel_writer, sheet_name, index=False df.to_excel('result.xlsx', sheet_name='Summary', index=False)
df.to_json() 导出数据为 JSON 格式文件或字符串 path_or_buf, orient='records'/'split'/'dict' df.to_json('result.json', orient='records', force_ascii=False)
df.to_sql() 将 DataFrame 直接写入数据库表中 name, con, if_exists='fail'/'replace'/'append', index df.to_sql('target_table', con=engine, if_exists='append', index=False)