1.1 Pandas简介
1.1.1 什么是Pandas
Pandas(Python Data Analysis Library)是基于NumPy构建的开源数据分析和数据处理库。它提供了高性能、易用的数据结构和数据分析工具,是Python数据科学生态系统的核心组件。
graph TD
A[Python数据科学生态] --> B[NumPy - 数值计算基础]
A --> C[Pandas - 数据处理分析]
A --> D[Matplotlib - 数据可视化]
A --> E[Scikit-learn - 机器学习]
A --> F[Jupyter - 交互式开发]
B --> C
C --> D
C --> E
C --> F
1.1.2 Pandas的核心特性
强大的数据结构
- Series:一维标记数组
- DataFrame:二维标记数据结构(类似Excel表格)
数据处理能力
- 数据清洗和预处理
- 数据合并和连接
- 数据重塑和透视
- 时间序列分析
文件格式支持
- CSV、Excel、JSON、XML
- SQL数据库
- HDF5、Parquet
- 网络数据源
1.1.3 应用场景
class PandasApplications:
"""Pandas应用场景示例"""
@staticmethod
def business_analytics():
"""商业分析应用"""
applications = {
'销售分析': {
'description': '分析销售数据,识别趋势和模式',
'tasks': [
'销售额统计和趋势分析',
'客户行为分析',
'产品性能评估',
'季节性分析'
]
},
'财务分析': {
'description': '处理财务数据,生成报表',
'tasks': [
'收入支出分析',
'预算执行情况',
'成本结构分析',
'盈利能力评估'
]
},
'市场研究': {
'description': '分析市场数据和用户调研',
'tasks': [
'用户画像分析',
'市场份额统计',
'竞品分析',
'满意度调查分析'
]
}
}
return applications
@staticmethod
def scientific_research():
"""科学研究应用"""
applications = {
'生物信息学': {
'description': '处理基因组和蛋白质数据',
'examples': ['基因表达分析', '序列比对结果处理']
},
'气象分析': {
'description': '分析气象观测数据',
'examples': ['温度趋势分析', '降水量统计']
},
'社会科学': {
'description': '处理调查和统计数据',
'examples': ['人口统计分析', '社会调查数据处理']
}
}
return applications
# 使用示例
apps = PandasApplications()
business_apps = apps.business_analytics()
research_apps = apps.scientific_research()
print("商业分析应用:")
for app, details in business_apps.items():
print(f"- {app}: {details['description']}")
1.2 安装与环境配置
1.2.1 系统要求
基础要求
- Python版本:3.7或更高版本
- 操作系统:Windows、macOS、Linux
- 内存:建议4GB以上
- 存储空间:至少1GB可用空间
依赖库
# 核心依赖
dependencies = {
'numpy': '>=1.20.0',
'python-dateutil': '>=2.8.1',
'pytz': '>=2020.1'
}
# 可选依赖
optional_dependencies = {
'matplotlib': '>=3.3.0', # 绘图功能
'openpyxl': '>=3.0.0', # Excel文件支持
'xlrd': '>=2.0.0', # Excel读取
'sqlalchemy': '>=1.4.0', # 数据库连接
'beautifulsoup4': '>=4.9.0', # HTML解析
'lxml': '>=4.6.0', # XML解析
'requests': '>=2.25.0' # HTTP请求
}
1.2.2 安装方法
使用pip安装(推荐)
# 基础安装
pip install pandas
# 安装所有可选依赖
pip install pandas[all]
# 安装特定功能依赖
pip install pandas[excel] # Excel支持
pip install pandas[sql] # SQL数据库支持
pip install pandas[html] # HTML解析支持
pip install pandas[xml] # XML解析支持
pip install pandas[plot] # 绘图支持
# 指定版本安装
pip install pandas==2.1.0
# 升级到最新版本
pip install --upgrade pandas
使用conda安装
# 基础安装
conda install pandas
# 从conda-forge安装(推荐)
conda install -c conda-forge pandas
# 安装完整数据科学环境
conda install -c conda-forge pandas numpy matplotlib seaborn jupyter
# 创建专用环境
conda create -n data_analysis python=3.9 pandas numpy matplotlib
conda activate data_analysis
使用Anaconda
# Anaconda已预装pandas,直接使用
# 更新pandas
conda update pandas
# 检查版本
conda list pandas
1.2.3 验证安装
基础验证
# 导入pandas
import pandas as pd
import numpy as np
# 检查版本
print(f"Pandas版本: {pd.__version__}")
print(f"NumPy版本: {np.__version__}")
# 创建简单的DataFrame测试
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': ['a', 'b', 'c', 'd'],
'C': [1.1, 2.2, 3.3, 4.4]
})
print("\n测试DataFrame:")
print(df)
print(f"\nDataFrame形状: {df.shape}")
print(f"数据类型:\n{df.dtypes}")
功能验证
def verify_pandas_installation():
"""验证pandas安装和功能"""
print("=== Pandas安装验证 ===")
# 1. 基础功能测试
try:
import pandas as pd
print(f"✓ Pandas导入成功,版本: {pd.__version__}")
except ImportError as e:
print(f"✗ Pandas导入失败: {e}")
return False
# 2. 数据结构测试
try:
# Series测试
s = pd.Series([1, 2, 3, 4, 5])
print(f"✓ Series创建成功,长度: {len(s)}")
# DataFrame测试
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(f"✓ DataFrame创建成功,形状: {df.shape}")
except Exception as e:
print(f"✗ 数据结构测试失败: {e}")
return False
# 3. 文件IO测试
try:
# CSV测试
df.to_csv('test.csv', index=False)
df_read = pd.read_csv('test.csv')
print("✓ CSV读写功能正常")
# 清理测试文件
import os
os.remove('test.csv')
except Exception as e:
print(f"✗ 文件IO测试失败: {e}")
# 4. 可选依赖测试
optional_features = {
'matplotlib': 'df.plot()',
'openpyxl': 'Excel文件支持',
'sqlalchemy': 'SQL数据库支持',
'beautifulsoup4': 'HTML解析支持'
}
print("\n=== 可选功能检查 ===")
for package, description in optional_features.items():
try:
__import__(package)
print(f"✓ {package}: {description}")
except ImportError:
print(f"- {package}: 未安装 ({description})")
print("\n=== 验证完成 ===")
return True
# 运行验证
verify_pandas_installation()
1.2.4 开发环境配置
Jupyter Notebook配置
# 安装Jupyter
pip install jupyter
# 启动Jupyter Notebook
jupyter notebook
# 安装JupyterLab(推荐)
pip install jupyterlab
jupyter lab
IDE配置
PyCharm配置
# PyCharm中配置pandas
# 1. 设置Python解释器
# 2. 安装pandas插件
# 3. 配置代码模板
# pandas导入模板
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置显示选项
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', 100)
pd.set_option('display.width', None)
VS Code配置
// settings.json
{
"python.defaultInterpreterPath": "/path/to/your/python",
"jupyter.askForKernelRestart": false,
"python.dataScience.askForKernelRestart": false,
"python.dataScience.sendSelectionToInteractiveWindow": true
}
性能配置
# pandas性能配置
import pandas as pd
# 设置显示选项
pd.set_option('display.max_columns', 20)
pd.set_option('display.max_rows', 100)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 50)
# 设置计算选项
pd.set_option('compute.use_bottleneck', True)
pd.set_option('compute.use_numexpr', True)
# 内存使用优化
pd.set_option('mode.copy_on_write', True)
# 查看所有配置选项
print("当前pandas配置:")
print(pd.describe_option())
1.3 基本概念和术语
1.3.1 核心数据结构
Series(序列)
import pandas as pd
import numpy as np
# 创建Series
s1 = pd.Series([1, 2, 3, 4, 5])
print("基础Series:")
print(s1)
# 带索引的Series
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print("\n带索引的Series:")
print(s2)
# 从字典创建Series
data_dict = {'apple': 5, 'banana': 3, 'orange': 8}
s3 = pd.Series(data_dict)
print("\n从字典创建的Series:")
print(s3)
DataFrame(数据框)
# 创建DataFrame
df1 = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['New York', 'London', 'Tokyo']
})
print("基础DataFrame:")
print(df1)
# 从列表创建DataFrame
data_list = [
['Alice', 25, 'New York'],
['Bob', 30, 'London'],
['Charlie', 35, 'Tokyo']
]
df2 = pd.DataFrame(data_list, columns=['name', 'age', 'city'])
print("\n从列表创建的DataFrame:")
print(df2)
# 从NumPy数组创建DataFrame
np_array = np.random.randn(4, 3)
df3 = pd.DataFrame(np_array, columns=['A', 'B', 'C'])
print("\n从NumPy数组创建的DataFrame:")
print(df3)
1.3.2 索引系统
索引的概念
# 索引是pandas的核心概念
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
})
print("DataFrame的索引:")
print(f"行索引: {df.index}")
print(f"列索引: {df.columns}")
# 自定义索引
df_custom = pd.DataFrame({
'sales': [100, 200, 150, 300],
'profit': [20, 40, 30, 60]
}, index=['Q1', 'Q2', 'Q3', 'Q4'])
print("\n自定义索引的DataFrame:")
print(df_custom)
多级索引
# 创建多级索引
arrays = [
['A', 'A', 'B', 'B'],
['one', 'two', 'one', 'two']
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
df_multi = pd.DataFrame({
'value1': [1, 2, 3, 4],
'value2': [10, 20, 30, 40]
}, index=multi_index)
print("多级索引DataFrame:")
print(df_multi)
1.3.3 数据类型
pandas数据类型
# pandas支持的数据类型
data_types_demo = pd.DataFrame({
'integer': [1, 2, 3],
'float': [1.1, 2.2, 3.3],
'string': ['a', 'b', 'c'],
'boolean': [True, False, True],
'datetime': pd.date_range('2024-01-01', periods=3),
'category': pd.Categorical(['small', 'medium', 'large'])
})
print("pandas数据类型示例:")
print(data_types_demo.dtypes)
print("\nDataFrame信息:")
print(data_types_demo.info())
数据类型转换
# 数据类型转换示例
df_convert = pd.DataFrame({
'numbers': ['1', '2', '3', '4'],
'prices': ['10.5', '20.3', '15.7', '25.1']
})
print("转换前的数据类型:")
print(df_convert.dtypes)
# 转换数据类型
df_convert['numbers'] = df_convert['numbers'].astype(int)
df_convert['prices'] = df_convert['prices'].astype(float)
print("\n转换后的数据类型:")
print(df_convert.dtypes)
print("\n转换后的数据:")
print(df_convert)
1.4 第一个pandas程序
1.4.1 数据创建和基本操作
import pandas as pd
import numpy as np
def first_pandas_program():
"""第一个pandas程序:学生成绩管理系统"""
print("=== 学生成绩管理系统 ===")
# 1. 创建学生数据
students_data = {
'student_id': [1001, 1002, 1003, 1004, 1005],
'name': ['张三', '李四', '王五', '赵六', '钱七'],
'age': [20, 21, 19, 22, 20],
'gender': ['男', '女', '男', '女', '男'],
'math': [85, 92, 78, 96, 88],
'english': [78, 85, 92, 89, 76],
'science': [90, 88, 85, 94, 91]
}
df = pd.DataFrame(students_data)
print("1. 学生基础信息:")
print(df)
# 2. 基本信息查看
print(f"\n2. 数据基本信息:")
print(f"数据形状: {df.shape}")
print(f"列名: {list(df.columns)}")
print(f"数据类型:\n{df.dtypes}")
# 3. 统计信息
print(f"\n3. 数值列统计信息:")
print(df.describe())
# 4. 计算总分和平均分
df['total_score'] = df['math'] + df['english'] + df['science']
df['average_score'] = df['total_score'] / 3
print(f"\n4. 添加总分和平均分后:")
print(df[['name', 'math', 'english', 'science', 'total_score', 'average_score']])
# 5. 数据筛选
high_performers = df[df['average_score'] >= 85]
print(f"\n5. 平均分85分以上的学生:")
print(high_performers[['name', 'average_score']])
# 6. 排序
df_sorted = df.sort_values('total_score', ascending=False)
print(f"\n6. 按总分排序:")
print(df_sorted[['name', 'total_score']].head())
# 7. 分组统计
gender_stats = df.groupby('gender').agg({
'math': 'mean',
'english': 'mean',
'science': 'mean',
'total_score': 'mean'
}).round(2)
print(f"\n7. 按性别分组的平均成绩:")
print(gender_stats)
return df
# 运行第一个程序
student_df = first_pandas_program()
1.4.2 数据可视化入门
import matplotlib.pyplot as plt
def visualize_student_data(df):
"""可视化学生数据"""
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 创建子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle('学生成绩分析', fontsize=16)
# 1. 各科成绩分布
subjects = ['math', 'english', 'science']
df[subjects].plot(kind='box', ax=axes[0, 0])
axes[0, 0].set_title('各科成绩分布')
axes[0, 0].set_ylabel('分数')
# 2. 学生总分排名
df_sorted = df.sort_values('total_score', ascending=True)
axes[0, 1].barh(df_sorted['name'], df_sorted['total_score'])
axes[0, 1].set_title('学生总分排名')
axes[0, 1].set_xlabel('总分')
# 3. 性别成绩对比
gender_stats = df.groupby('gender')[subjects].mean()
gender_stats.plot(kind='bar', ax=axes[1, 0])
axes[1, 0].set_title('性别成绩对比')
axes[1, 0].set_ylabel('平均分')
axes[1, 0].tick_params(axis='x', rotation=0)
# 4. 成绩相关性
corr_matrix = df[subjects].corr()
im = axes[1, 1].imshow(corr_matrix, cmap='coolwarm', aspect='auto')
axes[1, 1].set_xticks(range(len(subjects)))
axes[1, 1].set_yticks(range(len(subjects)))
axes[1, 1].set_xticklabels(subjects)
axes[1, 1].set_yticklabels(subjects)
axes[1, 1].set_title('科目成绩相关性')
# 添加相关系数标注
for i in range(len(subjects)):
for j in range(len(subjects)):
text = axes[1, 1].text(j, i, f'{corr_matrix.iloc[i, j]:.2f}',
ha="center", va="center", color="black")
plt.tight_layout()
plt.show()
# 可视化数据(如果有matplotlib)
try:
visualize_student_data(student_df)
except ImportError:
print("matplotlib未安装,跳过可视化部分")
1.5 常见问题和解决方案
1.5.1 安装问题
问题1:pip安装失败
# 解决方案1:升级pip
python -m pip install --upgrade pip
# 解决方案2:使用国内镜像
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 解决方案3:使用conda
conda install pandas
问题2:依赖冲突
# 创建新的虚拟环境
python -m venv pandas_env
source pandas_env/bin/activate # Linux/Mac
pandas_env\Scripts\activate # Windows
# 在新环境中安装
pip install pandas
1.5.2 导入问题
问题1:ImportError
# 检查pandas是否正确安装
try:
import pandas as pd
print(f"Pandas版本: {pd.__version__}")
except ImportError as e:
print(f"导入失败: {e}")
print("请检查pandas是否正确安装")
问题2:版本兼容性
# 检查版本兼容性
import sys
import pandas as pd
print(f"Python版本: {sys.version}")
print(f"Pandas版本: {pd.__version__}")
# 检查最低版本要求
min_version = "1.3.0"
if pd.__version__ < min_version:
print(f"警告: 当前版本 {pd.__version__} 低于推荐版本 {min_version}")
1.5.3 性能问题
内存使用优化
import pandas as pd
def optimize_memory_usage(df):
"""优化DataFrame内存使用"""
print("优化前内存使用:")
print(df.info(memory_usage='deep'))
# 优化整数类型
for col in df.select_dtypes(include=['int64']).columns:
df[col] = pd.to_numeric(df[col], downcast='integer')
# 优化浮点类型
for col in df.select_dtypes(include=['float64']).columns:
df[col] = pd.to_numeric(df[col], downcast='float')
# 优化字符串类型
for col in df.select_dtypes(include=['object']).columns:
if df[col].nunique() / len(df) < 0.5: # 如果唯一值比例小于50%
df[col] = df[col].astype('category')
print("\n优化后内存使用:")
print(df.info(memory_usage='deep'))
return df
# 使用示例
# optimized_df = optimize_memory_usage(your_dataframe)
1.6 本章小结
1.6.1 核心知识点
Pandas概述
- Python数据分析的核心库
- 基于NumPy构建
- 提供Series和DataFrame数据结构
安装配置
- 支持pip和conda安装
- 可选依赖增强功能
- 开发环境配置
基本概念
- Series:一维标记数组
- DataFrame:二维标记数据结构
- 索引系统:行索引和列索引
数据类型
- 数值型、字符串、布尔型
- 日期时间、分类数据
- 类型转换和优化
1.6.2 实践要点
- 选择合适的安装方式
- 验证安装和功能
- 配置开发环境
- 理解核心概念
- 掌握基本操作
1.6.3 下一步学习
在下一章中,我们将深入学习: - Series和DataFrame的详细操作 - 索引和标签的高级用法 - 数据结构的创建和转换 - 内存管理和性能优化
练习题
- 安装pandas并验证安装成功
- 创建一个包含个人信息的DataFrame
- 尝试不同的数据类型转换
- 配置你的开发环境
- 运行本章的示例代码
记住:熟练掌握基础概念是后续学习的关键!