Pandas入门:最适合新手的完整教程
欢迎来到 Pandas 的世界!如果你是数据科学领域的新手,或者希望在 Python 中寻找一个强大的工具来处理和分析数据,那么你来对地方了。Pandas 是 Python 数据生态系统的基石,被广泛应用于从简单的电子表格操作到复杂的统计分析等各种任务。
本教程将从零开始,带你一步步了解 Pandas 的核心概念和常用操作,让你能够自信地开始自己的数据分析之旅。
1. 什么是 Pandas?为什么选择它?
Pandas 是一个开源的 Python 库,专门用于数据处理和分析。它的名字来源于“Panel Data”(面板数据),这是一个计量经济学中用于多维结构化数据集的术语。
为什么选择 Pandas?
- 简单易用:Pandas 提供了两种强大的数据结构——
Series和DataFrame,它们非常直观,可以让你像使用电子表格或 SQL 数据库一样处理数据。 - 功能强大:它提供了丰富的功能,可以轻松完成数据清洗、转换、合并、筛选、分组、聚合等各种操作。
- 高效性能:Pandas 的底层由 C 或 Cython 实现,确保了在处理大型数据集时依然有出色的性能。
- 生态系统完善:Pandas 与其他数据科学库(如 NumPy、Matplotlib、Scikit-learn)无缝集成,构成了强大的 Python 数据分析工具链。
- 强大的 I/O 能力:可以轻松读取和写入多种格式的数据,如 CSV、Excel、JSON、SQL 数据库等。
2. 安装 Pandas
在开始之前,你需要先安装 Pandas。如果你已经安装了 Anaconda,那么 Pandas 已经为你准备好了。如果没有,你可以使用 pip 来安装。
打开你的终端或命令提示符,输入以下命令:
bash
pip install pandas
为了充分利用 Pandas 的功能,建议同时安装 NumPy,它是 Pandas 的主要依赖项。
bash
pip install numpy
3. Pandas 的核心:Series 和 DataFrame
Pandas 有两个主要的数据结构,它们是所有操作的基础。
3.1. Series:一维数据结构
Series 是一个类似于一维数组的对象,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。它由两部分组成:
- 数据 (values):一组数据。
- 索引 (index):与数据相关联的标签。
如果你不指定索引,Pandas 会自动创建一个从 0 开始的整数索引。
创建一个 Series:
“`python
import pandas as pd
从列表创建一个 Series
s = pd.Series([1, 3, 5, None, 6, 8])
print(s)
“`
输出:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
NaN (Not a Number) 是 Pandas 中表示缺失值的标准方式。
3.2. DataFrame:二维数据结构
DataFrame 是 Pandas 中最核心、最常用的数据结构。它是一个二维的、表格型的数据结构,可以看作是一个由多个 Series 共享相同索引组成的字典。
- 它有行索引 (index) 和列索引 (columns)。
- 每一列都可以是不同的数据类型。
你可以把它想象成一个 Excel 电子表格或一个 SQL 表。
创建一个 DataFrame:
“`python
import pandas as pd
创建一个数据字典
data = {
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, 35, 40],
‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’, ‘Houston’]
}
从字典创建一个 DataFrame
df = pd.DataFrame(data)
print(df)
“`
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
3 David 40 Houston
4. 读取和写入数据
Pandas 的强大之处在于它可以轻松处理来自不同来源的数据。
4.1. 读取数据
最常见的操作是从 CSV 文件读取数据。假设你有一个名为 data.csv 的文件。
“`python
读取 CSV 文件
df = pd.read_csv(‘data.csv’)
你也可以读取 Excel, JSON, SQL 等
df_excel = pd.read_excel(‘data.xlsx’)
df_json = pd.read_json(‘data.json’)
“`
4.2. 写入数据
同样,你也可以轻松地将 DataFrame 保存到各种格式的文件中。
“`python
将 DataFrame 保存为 CSV 文件
df.to_csv(‘output.csv’, index=False) # index=False 表示不保存行索引
保存为 Excel 文件
df.to_excel(‘output.xlsx’, sheet_name=’Sheet1′)
“`
5. 数据检视与探索
当你加载一个数据集后,第一步通常是快速了解它的基本情况。
假设我们有以下 DataFrame df:
“`python
为了演示,我们创建一个示例 DataFrame
data = {
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eva’],
‘Age’: [25, 30, 35, 40, 25],
‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’, ‘Houston’, ‘New York’],
‘Salary’: [50000, 80000, 75000, 120000, 52000]
}
df = pd.DataFrame(data)
“`
-
查看前几行/后几行数据
python
print(df.head()) # 默认显示前 5 行
print(df.tail(3)) # 显示后 3 行 -
查看 DataFrame 的基本信息
info()方法提供了 DataFrame 的简要摘要,包括索引类型、列类型、非空值数量和内存使用情况。python
print(df.info()) -
获取描述性统计信息
describe()方法对数值类型的列生成描述性统计数据,如计数、平均值、标准差、最小值、最大值等。python
print(df.describe()) -
查看维度
python
print(df.shape) # 返回一个元组 (行数, 列数)
6. 数据选择与索引
选择数据的特定部分是数据分析中的一项基本操作。
6.1. 选择列
你可以像操作字典一样选择一列,它会返回一个 Series。
“`python
选择单列
ages = df[‘Age’]
print(ages)
选择多列
subset = df[[‘Name’, ‘City’]]
print(subset)
“`
6.2. 选择行:loc 和 iloc
Pandas 提供了两种主要的选择方法:
loc:基于标签进行选择。iloc:基于整数位置进行选择。
使用 loc(基于标签)
“`python
选择单行 (索引为 2 的行)
print(df.loc[2])
选择多行
print(df.loc[1:3]) # 注意:包含结束索引 3
同时选择行和列
print(df.loc[1:3, [‘Name’, ‘Salary’]])
“`
使用 iloc(基于位置)
“`python
选择单行 (位置为 2 的行,即第三行)
print(df.iloc[2])
选择多行
print(df.iloc[1:4]) # 注意:不包含结束位置 4
同时选择行和列
print(df.iloc[1:4, [0, 3]]) # 选择第 2 到 4 行,第 1 和 4 列
“`
6.3. 条件选择(布尔索引)
这是 Pandas 最强大、最常用的功能之一。你可以根据条件来筛选数据。
“`python
选择年龄大于 30 的所有行
print(df[df[‘Age’] > 30])
选择居住在 New York 的所有行
print(df[df[‘City’] == ‘New York’])
组合多个条件
选择年龄大于 25 且居住在 New York 的人
print(df[(df[‘Age’] > 25) & (df[‘City’] == ‘New York’)])
“`
7. 数据清洗
现实世界中的数据往往是不完美的,可能包含缺失值或重复值。
7.1. 处理缺失值
NaN 表示缺失数据。
“`python
假设我们有一个包含缺失值的 DataFrame
data_missing = {
‘A’: [1, 2, None, 4],
‘B’: [5, None, 7, 8]
}
df_miss = pd.DataFrame(data_missing)
删除包含缺失值的行
print(df_miss.dropna())
填充缺失值
print(df_miss.fillna(value=0))
“`
7.2. 处理重复值
“`python
检查是否有重复行
print(df.duplicated())
删除重复行
df_unique = df.drop_duplicates()
“`
8. 数据操作
8.1. 添加新列
“`python
添加一个基于现有列的新列
df[‘Age_in_5_Years’] = df[‘Age’] + 5
添加一个不相关的列
df[‘Country’] = ‘USA’
print(df.head())
“`
8.2. 排序
“`python
按年龄升序排序
print(df.sort_values(by=’Age’))
按薪水降序排序
print(df.sort_values(by=’Salary’, ascending=False))
“`
9. 分组与聚合 (groupby)
groupby 是一个非常强大的功能,它遵循 “split-apply-combine”(拆分-应用-合并)的模式。
- 拆分 (Split):根据某个标准将数据分成组。
- 应用 (Apply):对每个组独立应用一个函数(如
sum,mean,count)。 - 合并 (Combine):将结果合并成一个数据结构。
示例:按城市计算平均薪水
“`python
按 ‘City’ 分组,然后计算每个城市 ‘Salary’ 的平均值
avg_salary_by_city = df.groupby(‘City’)[‘Salary’].mean()
print(avg_salary_by_city)
“`
输出:
City
Chicago 75000.0
Houston 120000.0
Los Angeles 80000.0
New York 51000.0
Name: Salary, dtype: float64
你也可以同时进行多个聚合操作:
“`python
按城市分组,并计算薪水的平均值和年龄的最大值
stats_by_city = df.groupby(‘City’).agg({
‘Salary’: ‘mean’,
‘Age’: ‘max’
})
print(stats_by_city)
“`
10. 合并、连接与拼接
Pandas 提供了多种方式来合并多个 DataFrame。
concat:沿着一个轴将多个对象堆叠在一起。merge:类似于 SQL 的 JOIN 操作,根据一个或多个键将行连接起来。
示例:
“`python
df1 = pd.DataFrame({‘A’: [‘A0’, ‘A1’], ‘B’: [‘B0’, ‘B1’]})
df2 = pd.DataFrame({‘A’: [‘A2’, ‘A3’], ‘B’: [‘B2’, ‘B3’]})
拼接 (Concatenation)
result_concat = pd.concat([df1, df2])
print(result_concat)
—
left = pd.DataFrame({‘key’: [‘K0’, ‘K1’], ‘A’: [‘A0’, ‘A1’]})
right = pd.DataFrame({‘key’: [‘K0’, ‘K1’], ‘B’: [‘B0’, ‘B1’]})
合并 (Merge)
result_merge = pd.merge(left, right, on=’key’)
print(result_merge)
“`
11. 总结与后续步骤
恭喜你!你已经完成了 Pandas 的入门之旅。我们已经涵盖了:
- Pandas 的核心数据结构:
Series和DataFrame。 - 如何读取和写入数据。
- 如何检视、选择和筛选数据。
- 如何处理缺失值。
- 如何通过分组和聚合来分析数据。
- 如何合并多个数据集。
这只是冰山一角。Pandas 的功能远不止于此。
下一步该学什么?
- 官方文档:Pandas 的官方文档是学习的最佳资源。
- 时间序列分析:Pandas 在处理时间序列数据方面非常出色。
- 更高级的索引:学习多级索引 (
MultiIndex)。 - 性能优化:了解如何让你的 Pandas 代码运行得更快。
- 可视化:结合 Matplotlib 或 Seaborn 对你的数据进行可视化。
现在,最好的学习方法就是动手实践。找一个你感兴趣的数据集,用你今天学到的知识去探索它吧!祝你数据分析之旅愉快!