一、数据创建与读取
1. 创建 DataFrame/Series
import pandas as pd
import numpy as np
# 创建 Series(一维)
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f'])
# 创建 DataFrame(二维)
df = pd.DataFrame({'A': [1, 2, 3, 4],'B': pd.Timestamp('20230101'),'C': pd.Series(1, index=list(range(4)), dtype='float32'),'D': np.array([3] * 4, dtype='int32'),'E': pd.Categorical(["test", "train", "test", "train"]),'F': 'foo'
})
2. 读取外部数据
# 读取 CSV
df = pd.read_csv('data.csv')
# 读取 Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 读取 SQL
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table', conn)
二、数据查看与基础信息
# 查看前/后 N 行(默认5行)
df.head(3) # 前3行
df.tail(3) # 后3行
# 查看索引、列名、数据类型
df.index # 索引
df.columns # 列名
df.dtypes # 各列数据类型
# 查看基本统计信息(数值列)
df.describe() # 计数、均值、标准差、最值、分位数
# 查看数据形状(行数, 列数)
df.shape # (n_rows, n_cols)
# 查看数据是否为空
df.isnull() # 元素级是否为空
df.isnull().sum() # 每列空值数量
三、数据筛选与查询
1. 按列筛选
# 选择单列(返回 Series)
df['A'] # 或 df.A
# 选择多列(返回 DataFrame)
df[['A', 'B']]
2. 按行筛选
# 按位置筛选(iloc:基于整数索引)
df.iloc[0] # 第0行
df.iloc[0:3, 0:2] # 前3行,前2列
# 按标签筛选(loc:基于索引/列名)
df.loc[0:2, ['A', 'B']] # 索引0-2行,A、B列
# 按条件筛选(布尔索引)
df[df['A'] > 2] # A列值>2的行
df[(df['A'] > 2) & (df['E'] == 'test')] # 多条件(用&/|,而非and/or)
3. 其他筛选方法
# 筛选包含特定值的行
df[df['E'].isin(['test'])]
# 筛选非空值行
df[df['A'].notnull()]
四、数据修改与处理
1. 新增 / 修改列
# 新增列
df['new_col'] = df['A'] * 2 # 基于现有列计算
df['new_col2'] = 'value' # 固定值
# 修改列值
df.loc[df['A'] > 2, 'A'] = 0 # 条件修改
# 重命名列
df.rename(columns={'A': 'new_A', 'B': 'new_B'}, inplace=True)
2. 处理缺失值
# 填充空值
df.fillna(0) # 用0填充
df.fillna(df.mean()) # 用均值填充(数值列)
df['A'].fillna(method='ffill') # 向前填充(用前一行值)
# 删除空值
df.dropna() # 删除含空值的行
df.dropna(axis=1) # 删除含空值的列
3. 数据排序
# 按列值排序
df.sort_values(by='A') # 升序
df.sort_values(by='A', ascending=False) # 降序
# 按索引排序
df.sort_index() # 索引升序
五、分组与聚合(Groupby)
# 按列分组
grouped = df.groupby('E') # 按E列分组
# 分组后聚合
grouped.sum() # 每组求和
grouped.mean() # 每组求均值
grouped['A'].max() # 仅对A列求每组最大值
# 多函数聚合
grouped.agg({'A': ['sum', 'mean'],'B': 'max'
})
# 分组后应用自定义函数
grouped.apply(lambda x: x['A'] * 2) # 对每组A列乘2
六、数据合并与连接
# 示例数据
df1 = pd.DataFrame({'key': ['a', 'b', 'c'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['b', 'c', 'd'], 'value': [4, 5, 6]})
# 内连接(仅保留共有的key)
pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))
# 左连接(保留df1所有行)
pd.merge(df1, df2, on='key', how='left')
# 纵向拼接(行合并)
pd.concat([df1, df2], ignore_index=True) # ignore_index重置索引
七、数值计算与转换
# 列间运算
df['A'] + df['D'] # 列相加
df['A'] * 10 # 列乘常数
# 滚动计算(滑动窗口)
df['A'].rolling(window=2).mean() # 2期滑动均值
# 累计计算
df['A'].cumsum() # 累计和
df['A'].cumprod() # 累计积
# 数据类型转换
df['A'] = df['A'].astype('float32') # 转为float
df['B'] = pd.to_datetime(df['B']) # 转为日期类型
八、数据导出
# 导出为CSV
df.to_csv('output.csv', index=False) # index=False不导出索引
# 导出为Excel
df.to_excel('output.xlsx', sheet_name='Data', index=False)
# 导出为SQL
df.to_sql('table', conn, if_exists='replace', index=False)