Pandas入门:最适合新手的完整教程 – wiki词典


Pandas入门:最适合新手的完整教程

欢迎来到 Pandas 的世界!如果你是数据科学领域的新手,或者希望在 Python 中寻找一个强大的工具来处理和分析数据,那么你来对地方了。Pandas 是 Python 数据生态系统的基石,被广泛应用于从简单的电子表格操作到复杂的统计分析等各种任务。

本教程将从零开始,带你一步步了解 Pandas 的核心概念和常用操作,让你能够自信地开始自己的数据分析之旅。

1. 什么是 Pandas?为什么选择它?

Pandas 是一个开源的 Python 库,专门用于数据处理和分析。它的名字来源于“Panel Data”(面板数据),这是一个计量经济学中用于多维结构化数据集的术语。

为什么选择 Pandas?

  • 简单易用:Pandas 提供了两种强大的数据结构——SeriesDataFrame,它们非常直观,可以让你像使用电子表格或 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. 选择行:lociloc

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 的核心数据结构:SeriesDataFrame
  • 如何读取和写入数据。
  • 如何检视、选择和筛选数据。
  • 如何处理缺失值。
  • 如何通过分组和聚合来分析数据。
  • 如何合并多个数据集。

这只是冰山一角。Pandas 的功能远不止于此。

下一步该学什么?

  • 官方文档:Pandas 的官方文档是学习的最佳资源。
  • 时间序列分析:Pandas 在处理时间序列数据方面非常出色。
  • 更高级的索引:学习多级索引 (MultiIndex)。
  • 性能优化:了解如何让你的 Pandas 代码运行得更快。
  • 可视化:结合 Matplotlib 或 Seaborn 对你的数据进行可视化。

现在,最好的学习方法就是动手实践。找一个你感兴趣的数据集,用你今天学到的知识去探索它吧!祝你数据分析之旅愉快!


滚动至顶部