Pandas Python 教程:新手友好型入门指南 – wiki基地

Pandas Python 教程:新手友好型入门指南

Pandas 是 Python 中用于数据分析和处理的强大而灵活的库。它提供了快速、灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的工作变得简单直观。无论是清洗数据、探索数据、转换数据还是建模数据,Pandas 都是数据科学工具箱中不可或缺的一部分。

本教程旨在为 Pandas 的新手提供一个友好而全面的入门指南。我们将从 Pandas 的核心概念开始,然后逐步介绍各种常用的功能和技巧,并提供大量的代码示例和解释,让你能够快速上手并自信地使用 Pandas 进行数据分析。

1. 什么是 Pandas?为什么要使用 Pandas?

Pandas 的名字来源于 “Panel Data” 和 “Python Data Analysis”。它建立在 NumPy 库之上,并提供了两种主要的数据结构:

  • Series (序列): 一维标记的数组,可以存储任何数据类型(整数、浮点数、字符串等)。类似于带有索引的 NumPy 数组。
  • DataFrame (数据框): 二维标记的表格,可以存储不同类型的数据列。类似于电子表格或 SQL 表格。

使用 Pandas 的好处:

  • 数据处理能力强大: Pandas 提供了丰富的功能,可以轻松地清洗、转换、合并、过滤和聚合数据。
  • 灵活的数据结构: Series 和 DataFrame 提供了灵活的数据结构,可以方便地处理各种类型的数据。
  • 易于使用: Pandas 提供了直观的 API,使得数据操作变得简单易懂。
  • 与其他库集成良好: Pandas 与 NumPy, Matplotlib, Scikit-learn 等其他流行的 Python 库集成良好,可以构建完整的数据科学工作流。
  • 性能优异: Pandas 针对性能进行了优化,可以快速处理大型数据集。

2. 安装 Pandas

在使用 Pandas 之前,需要先安装它。你可以使用 pip 命令进行安装:

bash
pip install pandas

安装完成后,就可以在 Python 脚本中导入 Pandas 库:

python
import pandas as pd

pd 是 Pandas 的常用别名,方便在代码中引用。

3. Pandas 的核心数据结构:Series 和 DataFrame

3.1 Series

Series 是一维标记的数组,可以存储任何数据类型。可以通过以下方式创建 Series:

  • 从列表创建:

    “`python
    import pandas as pd

    data = [10, 20, 30, 40, 50]
    s = pd.Series(data)
    print(s)
    “`

    输出:

    0 10
    1 20
    2 30
    3 40
    4 50
    dtype: int64

    可以看到,Series 自动分配了一个默认的整数索引(从 0 开始)。

  • 从 NumPy 数组创建:

    “`python
    import pandas as pd
    import numpy as np

    data = np.array([10, 20, 30, 40, 50])
    s = pd.Series(data)
    print(s)
    “`

    输出与上例相同。

  • 从字典创建:

    “`python
    import pandas as pd

    data = {‘a’: 10, ‘b’: 20, ‘c’: 30, ‘d’: 40, ‘e’: 50}
    s = pd.Series(data)
    print(s)
    “`

    输出:

    a 10
    b 20
    c 30
    d 40
    e 50
    dtype: int64

    在这种情况下,字典的键被用作 Series 的索引。

  • 指定索引:

    “`python
    import pandas as pd

    data = [10, 20, 30, 40, 50]
    index = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
    s = pd.Series(data, index=index)
    print(s)
    “`

    输出:

    a 10
    b 20
    c 30
    d 40
    e 50
    dtype: int64

访问 Series 中的数据:

  • 通过索引访问:

    “`python
    import pandas as pd

    data = {‘a’: 10, ‘b’: 20, ‘c’: 30, ‘d’: 40, ‘e’: 50}
    s = pd.Series(data)

    print(s[‘a’]) # 输出:10
    print(s[‘c’]) # 输出:30
    “`

  • 通过位置访问 (类似于列表):

    “`python
    import pandas as pd

    data = [10, 20, 30, 40, 50]
    s = pd.Series(data)

    print(s[0]) # 输出:10
    print(s[2]) # 输出:30
    “`

  • 切片访问:

    “`python
    import pandas as pd

    data = [10, 20, 30, 40, 50]
    s = pd.Series(data)

    print(s[1:4]) # 输出:
    # 1 20
    # 2 30
    # 3 40
    # dtype: int64
    “`

3.2 DataFrame

DataFrame 是二维标记的表格,可以存储不同类型的数据列。可以通过以下方式创建 DataFrame:

  • 从字典创建 (常用):

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)
    print(df)
    “`

    输出:

    Name Age City
    0 Alice 25 New York
    1 Bob 30 London
    2 Charlie 28 Paris
    3 David 22 Tokyo

    字典的键被用作列名,字典的值 (列表) 被用作列的数据。

  • 从列表的列表创建:

    “`python
    import pandas as pd

    data = [
    [‘Alice’, 25, ‘New York’],
    [‘Bob’, 30, ‘London’],
    [‘Charlie’, 28, ‘Paris’],
    [‘David’, 22, ‘Tokyo’]
    ]
    columns = [‘Name’, ‘Age’, ‘City’]
    df = pd.DataFrame(data, columns=columns)
    print(df)
    “`

    输出与上例相同。 需要指定列名。

  • 从 Series 的字典创建:

    “`python
    import pandas as pd

    data = {
    ‘Name’: pd.Series([‘Alice’, ‘Bob’, ‘Charlie’, ‘David’]),
    ‘Age’: pd.Series([25, 30, 28, 22]),
    ‘City’: pd.Series([‘New York’, ‘London’, ‘Paris’, ‘Tokyo’])
    }
    df = pd.DataFrame(data)
    print(df)
    “`

    输出与上例相同。

访问 DataFrame 中的数据:

  • 访问列:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    print(df[‘Name’]) # 输出 Name 列
    print(df.Age) # 输出 Age 列 (如果列名符合 Python 变量命名规则)
    “`

  • 访问行:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    print(df.loc[0]) # 输出第一行 (基于标签的索引)
    print(df.iloc[0]) # 输出第一行 (基于整数的索引)
    “`

    loc 基于标签索引,iloc 基于整数索引。

  • 访问单元格:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    print(df.loc[0, ‘Name’]) # 输出第一行,Name 列的值: Alice
    print(df.iloc[0, 0]) # 输出第一行,第一列的值: Alice
    “`

  • 切片访问:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    print(df[1:3]) # 输出第 2 行和第 3 行

    “`

4. 数据导入和导出

Pandas 提供了多种方法来导入和导出数据,支持各种格式,包括 CSV, Excel, SQL, JSON 等。

  • 读取 CSV 文件:

    “`python
    import pandas as pd

    df = pd.read_csv(‘data.csv’) # 将 data.csv 文件读入 DataFrame
    print(df.head()) # 显示 DataFrame 的前几行
    “`

  • 读取 Excel 文件:

    “`python
    import pandas as pd

    df = pd.read_excel(‘data.xlsx’) # 将 data.xlsx 文件读入 DataFrame
    print(df.head()) # 显示 DataFrame 的前几行
    “`

  • 导出到 CSV 文件:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    df.to_csv(‘output.csv’, index=False) # 将 DataFrame 导出到 output.csv 文件,不包含索引列
    “`

  • 导出到 Excel 文件:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    df.to_excel(‘output.xlsx’, index=False) # 将 DataFrame 导出到 output.xlsx 文件,不包含索引列
    “`

5. 数据清洗和转换

Pandas 提供了强大的数据清洗和转换功能,可以帮助你处理缺失值、重复值、异常值等问题。

  • 处理缺失值:

    “`python
    import pandas as pd
    import numpy as np

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eve’],
    ‘Age’: [25, 30, np.nan, 22, 27], # 包含缺失值 (NaN)
    ‘City’: [‘New York’, ‘London’, ‘Paris’, np.nan, ‘Berlin’]
    }
    df = pd.DataFrame(data)

    print(df.isnull()) # 检测缺失值,返回布尔 DataFrame
    print(df.isnull().sum()) # 统计每列缺失值的数量

    df_filled = df.fillna(0) # 使用 0 填充缺失值
    print(df_filled)

    df_dropped = df.dropna() # 删除包含缺失值的行
    print(df_dropped)

    更精细的操作,可以用特定列的均值填充缺失值

    df[‘Age’] = df[‘Age’].fillna(df[‘Age’].mean())
    print(df)
    “`

  • 处理重复值:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘Alice’, ‘Bob’],
    ‘Age’: [25, 30, 28, 25, 30],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘New York’, ‘London’]
    }
    df = pd.DataFrame(data)

    print(df.duplicated()) # 检测重复行,返回布尔 Series

    df_dropped = df.drop_duplicates() # 删除重复行
    print(df_dropped)
    “`

  • 数据类型转换:

    “`python
    import pandas as pd

    data = {
    ‘Age’: [’25’, ’30’, ’28’, ’22’] # 年龄是字符串类型
    }
    df = pd.DataFrame(data)

    print(df.dtypes) # 查看数据类型

    df[‘Age’] = df[‘Age’].astype(int) # 将 Age 列转换为整数类型
    print(df.dtypes)
    “`

6. 数据探索和分析

Pandas 提供了丰富的功能来探索和分析数据。

  • 描述性统计:

    “`python
    import pandas as pd

    data = {
    ‘Age’: [25, 30, 28, 22, 27],
    ‘Salary’: [50000, 60000, 55000, 45000, 52000]
    }
    df = pd.DataFrame(data)

    print(df.describe()) # 计算描述性统计信息 (均值、标准差、最小值、最大值等)
    print(df.mean()) # 计算每列的均值
    print(df.median()) # 计算每列的中位数
    print(df.std()) # 计算每列的标准差
    print(df.max()) # 计算每列的最大值
    print(df.min()) # 计算每列的最小值
    print(df.corr()) # 计算列之间的相关性
    “`

  • 数据分组和聚合:

    “`python
    import pandas as pd

    data = {
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘New York’, ‘London’, ‘Paris’],
    ‘Sales’: [100, 150, 120, 110, 160, 130]
    }
    df = pd.DataFrame(data)

    grouped = df.groupby(‘City’) # 按 City 列进行分组

    print(grouped.sum()) # 计算每个城市的总销售额
    print(grouped.mean()) # 计算每个城市的平均销售额
    “`

  • 数据排序:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22]
    }
    df = pd.DataFrame(data)

    df_sorted = df.sort_values(‘Age’) # 按 Age 列升序排序
    print(df_sorted)

    df_sorted_desc = df.sort_values(‘Age’, ascending=False) # 按 Age 列降序排序
    print(df_sorted_desc)
    “`

  • 条件过滤:

    “`python
    import pandas as pd

    data = {
    ‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
    ‘Age’: [25, 30, 28, 22],
    ‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Tokyo’]
    }
    df = pd.DataFrame(data)

    df_filtered = df[df[‘Age’] > 25] # 选择 Age 大于 25 的行
    print(df_filtered)

    df_filtered_city = df[df[‘City’] == ‘New York’] # 选择 City 是 New York 的行
    print(df_filtered_city)

    df_filtered_multiple = df[(df[‘Age’] > 25) & (df[‘City’] == ‘London’)] #多个条件
    print(df_filtered_multiple)
    “`

7. 总结

本教程提供了一个 Pandas 的新手友好型入门指南,介绍了 Pandas 的核心概念、数据结构、数据导入导出、数据清洗转换以及数据探索分析等方面的知识。 希望通过这些例子,你能了解Pandas的一些基本操作。 Pandas 的功能非常丰富,你需要在实践中不断学习和掌握。 建议继续探索 Pandas 的官方文档和各种在线资源,以提高你的数据分析能力。 祝你在数据科学的道路上取得成功!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部