Appearance
Pandas 用法总结
简介
Pandas 是 Python 中一个强大的数据分析库,它基于 NumPy 构建,提供了高效、灵活且易于使用的数据结构和数据分析工具,特别适用于处理结构化数据(如表格、CSV 文件、Excel 表格等)。其名称来源于 "Panel Data"(面板数据)和 "Python Data Analysis"(Python 数据分析)。
安装与导入
bash
pip install pandas通常在代码中这样导入:
python
import pandas as pd核心数据结构
Pandas 的核心是两种主要的数据结构:
1. Series
- 定义:一个一维的、带有标签的数组,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。
- 特点:类似于一个带索引的列表或一个一列的 DataFrame。
python
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
# 输出:
# a 10
# b 20
# c 30
# dtype: int642. DataFrame
- 定义:一个二维的、大小可变的、带有标签轴(行和列)的数据结构。
- 特点:这是 Pandas 中最常用的数据结构,类似于电子表格或 SQL 表。每一列可以是不同的数据类型。
python
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
print(df)
# 输出:
# Name Age City
# 0 Alice 25 New York
# 1 Bob 30 London
# 2 Charlie 35 Paris基本操作
查看数据
df.head(n): 查看前 n 行,默认为 5 行。df.tail(n): 查看后 n 行,默认为 5 行。df.info(): 显示 DataFrame 的基本信息,包括索引数据类型、列的数据类型、非空值数量等。df.describe(): 生成数值列的描述性统计信息(计数、均值、标准差等)。df.shape: 返回一个元组,表示 DataFrame 的维度(行数,列数)。df.columns: 获取列索引。df.index: 获取行索引。
数据类型
df.dtypes: 查看每列的数据类型。
数据选择与索引
基本选择
df['列名']: 选择单列,返回一个 Series。df[['列名1', '列名2']]: 选择多列,返回一个新的 DataFrame。
使用 .loc 和 .iloc
.loc: 主要基于标签(索引名)进行选择,支持切片,切片包含两端。.iloc: 主要基于整数位置(从0开始)进行选择,支持切片,切片不包含终点。
python
# .loc 示例: 选择行标签为 'row_1' 到 'row_3',列标签为 'col_A' 到 'col_B' 的数据
df.loc['row_1':'row_3', 'col_A':'col_B']
# .iloc 示例: 选择第 0 到 2 行(不包含第 3 行),第 1 到 3 列(不包含第 4 列)的数据
df.iloc[0:3, 1:4]数据清洗
处理缺失值
df.isnull()/df.isna(): 检查哪些值是缺失值 (NaN),返回布尔型 DataFrame。df.notnull()/df.notna(): 检查哪些值不是缺失值,返回布尔型 DataFrame。df.dropna(): 删除含有缺失值的行或列。df.fillna(value): 用指定值填充缺失值。
python
# 用 0 填充所有缺失值
df_cleaned = df.fillna(0)
# 只删除那些所有列都是缺失值的行
df_dropped = df.dropna(how='all')处理重复值
df.duplicated(): 检查并返回重复行的布尔 Series。df.drop_duplicates(): 删除重复行。
数据类型转换
df.astype(dtype): 将 DataFrame 或 Series 的数据类型转换为指定类型。
python
# 将 'Age' 列转换为整数类型
df['Age'] = df['Age'].astype(int)数据操作
添加/修改列
python
df['新列'] = df['列1'] * df['列2'] # 基于现有列计算得出
df['固定值列'] = '固定的值' # 添加一个常量列排序
df.sort_values(by='列名'): 按指定列的值进行排序。df.sort_index(): 按索引进行排序。
python
# 按 'Age' 列升序排序
df_sorted = df.sort_values(by='Age', ascending=True)应用函数
df.apply(func): 对 DataFrame 的行或列应用一个函数。series.map(dict_or_func): 对 Series 的每一个元素应用映射关系或函数。
python
# 对 'Age' 列的每个值加 1
df['Age_plus_one'] = df['Age'].apply(lambda x: x + 1)数据聚合与分组
GroupBy
groupby 是 Pandas 中一个非常强大的功能,可以将数据集按照一个或多个键(列)进行拆分,然后对每个组应用聚合函数。
python
# 按 'City' 分组,并计算每个城市 'Age' 的平均值
grouped = df.groupby('City')['Age'].mean()
print(grouped)
# 按 'City' 分组,并对 'Age' 计算多个统计量
stats = df.groupby('City')['Age'].agg(['mean', 'max', 'min'])
print(stats)文件读写
读取文件
pd.read_csv(filepath): 读取 CSV 文件。pd.read_excel(filepath): 读取 Excel 文件。pd.read_json(filepath): 读取 JSON 文件。pd.read_sql(query, connection): 从数据库读取数据。
写入文件
df.to_csv(filepath, index=False): 将 DataFrame 写入 CSV 文件,index=False表示不写入行索引。df.to_excel(filepath, index=False): 将 DataFrame 写入 Excel 文件。df.to_json(filepath): 将 DataFrame 写入 JSON 文件。
python
# 读取
df_from_csv = pd.read_csv('data.csv')
# 写入
df.to_csv('output.csv', index=False)实用技巧
- 链式操作: Pandas 支持链式调用,可以将多个操作串联起来,使代码更简洁。python
result = ( df[df['Age'] > 20] # 筛选 .sort_values('Age') # 排序 .reset_index(drop=True) # 重置索引 ) query()方法: 提供了一种更直观的方式来筛选数据。python# 等价于 df[(df['Age'] > 20) & (df['City'] == 'New York')] filtered_df = df.query("Age > 20 and City == 'New York'")