Python Pandas 教程:从零开始掌握 – wiki基地


Python Pandas 教程:从零开始掌握

数据是现代世界的石油,而处理和分析数据是释放其价值的关键。在 Python 生态系统中,NumPy 为数值计算提供了强大的基础,而 Pandas 则在其之上构建了一个高效的数据处理和分析库。无论你是数据科学、机器学习的初学者,还是需要处理大量表格数据的工程师或研究人员,掌握 Pandas 都是迈向成功的重要一步。

本教程将从零开始,带你一步步认识 Pandas 的核心概念,并学习如何使用它进行基本的数据操作。无需你有 Pandas 基础,但建议你对 Python 编程有基本了解。

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

Pandas 是一个开源的 Python 库,专门设计用于处理结构化数据(表格数据、时序数据、矩阵数据等)。它的名字来源于 “Panel Data”(面板数据)和 “Python Data Analysis”(Python 数据分析)。

为什么 Pandas 如此受欢迎?

  • 高效性: Pandas 的底层是基于 NumPy 构建的,这使得它在处理大量数据时非常高效。
  • 便捷性: Pandas 提供了丰富的高级数据结构和操作函数,使得数据清洗、转换、聚合等任务变得非常简单。
  • 功能强大: 它能轻松处理各种复杂的数据操作,包括缺失值处理、数据对齐、分组聚合、时间序列分析等。
  • 与生态圈融合: Pandas 与 Python 数据科学生态圈的其他库(如 NumPy, Matplotlib, Seaborn, Scikit-learn)无缝集成,可以方便地进行数据可视化、统计建模和机器学习。
  • 易学性: 对于熟悉 Python 的用户来说,Pandas 的语法直观易懂。

可以把 Pandas 看作是 Python 中一个非常强大的电子表格或数据库工具,但它具有编程的灵活性和自动化能力。

2. 环境准备与安装

在开始之前,你需要确保你的 Python 环境已经安装了 Pandas。

  • 推荐方法 (使用 Anaconda): 如果你使用 Anaconda 或 Miniconda,Pandas 通常已经预装好了。如果需要更新或确认安装,打开终端或 Anaconda Prompt,输入:
    bash
    conda install pandas
  • 使用 pip: 如果你使用的是标准的 Python 发行版,可以通过 pip 安装:
    bash
    pip install pandas

安装完成后,你可以在 Python 解释器或脚本中导入 Pandas 来验证:

python
import pandas as pd
print(pd.__version__)

如果能成功导入并打印版本号,说明安装成功。通常我们会约定俗成地使用 pd 作为 Pandas 的别名。

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

Pandas 的核心是两个主要的数据结构:Series (序列) 和 `DataFrame (数据框)。理解它们是掌握 Pandas 的基础。

3.1 Series (序列)

Series 是一种一维带标签的数组,可以存储任何数据类型(整数、浮点数、字符串、Python 对象等)。它可以被看作是一个带有索引的 NumPy 数组,或者是一个只有一列的电子表格。

主要特点:

  • 数据 (Data): 存储实际的值。
  • 索引 (Index): 存储每个数据点的标签。默认情况下是一个从 0 开始的整数序列,但你也可以指定自定义的索引(例如,字符串、日期等)。

创建 Series:

你可以通过多种方式创建 Series:

  • 从列表或 NumPy 数组创建:

    “`python
    import pandas as pd
    import numpy as np

    从列表创建,使用默认整数索引

    s1 = pd.Series([10, 20, 30, 40, 50])
    print(s1)
    print(“-” * 20)

    从 NumPy 数组创建,使用默认整数索引

    arr = np.array([1.1, 2.2, 3.3, 4.4])
    s2 = pd.Series(arr)
    print(s2)
    “`
    输出会显示数据及其对应的索引。

  • 从列表创建,指定索引:

    “`python

    指定自定义字符串索引

    s3 = pd.Series([90, 85, 92], index=[‘数学’, ‘语文’, ‘英语’])
    print(s3)
    “`
    这里,索引是科目的名称。

  • 从字典创建: 字典的键会成为索引,值会成为数据。

    “`python

    从字典创建

    data_dict = {‘北京’: 1000, ‘上海’: 1200, ‘广州’: 800, ‘深圳’: 950}
    s4 = pd.Series(data_dict)
    print(s4)
    “`

Series 的基本操作:

  • 访问数据和索引: 你可以通过 .values 获取数据数组,通过 .index 获取索引对象。

    python
    print(s4.values)
    print(s4.index)

  • 通过索引访问元素:

    python
    print(s4['北京']) # 通过标签索引
    print(s4[0]) # 通过整数位置索引 (如果索引是默认的或不重复的)
    print(s4[['北京', '上海']]) # 访问多个元素

  • 切片:

    python
    print(s4[0:2]) # 通过整数位置切片 (不包含终止位置)
    print(s4['北京':'广州']) # 通过标签切片 (包含终止位置)

  • 过滤:

    “`python

    过滤出值大于 900 的城市

    print(s4[s4 > 900])
    “`

  • 算术运算: Series 支持向量化运算,可以直接对整个 Series 进行数学计算。

    “`python
    print(s4 * 1.1) # 所有值增加 10%
    print(s4 + s4) # 对应位置相加

    不同 Series 之间的运算,会基于索引自动对齐

    s5 = pd.Series({‘北京’: 100, ‘上海’: 120, ‘杭州’: 50})
    print(s4 + s5) # 没有对齐的索引位置会产生 NaN (Not a Number)
    “`

3.2 DataFrame (数据框)

DataFrame 是 Pandas 中最常用的数据结构,它是一个二维带标签的数据结构,可以存储不同类型的数据。可以把它想象成一个电子表格、SQL 表或一个 Series 对象的字典。

主要特点:

  • 行索引 (Index): 类似于 Series 的索引,用于标识每一行数据。
  • 列索引 (Columns): 用于标识每一列数据,通常是列名。
  • 数据 (Data): 一个二维的数据块,每一列可以是不同的数据类型。

一个 DataFrame 可以看作是共享同一个索引的 Series 的集合。

创建 DataFrame:

  • 从字典创建: 最常见的方式之一,字典的键是列名,值是对应列的数据(可以是列表、NumPy 数组或 Series)。

    “`python

    从字典创建 DataFrame

    data = {
    ‘城市’: [‘北京’, ‘上海’, ‘广州’, ‘深圳’, ‘成都’],
    ‘人口 (万)’: [2154, 2428, 1530, 1303, 1650],
    ‘面积 (km^2)’: [16411, 6340, 7434, 1997, 14312]
    }
    df = pd.DataFrame(data)
    print(df)
    “`
    默认情况下,行索引是 0 到 n-1 的整数序列。列的顺序会按照字典的键顺序(Python 3.7+)或按字母顺序排列(旧版本)。

  • 指定列顺序和行索引:

    “`python

    指定列的顺序和自定义行索引

    df2 = pd.DataFrame(data, columns=[‘城市’, ‘面积 (km^2)’, ‘人口 (万)’],
    index=[‘A’, ‘B’, ‘C’, ‘D’, ‘E’])
    print(df2)
    “`

  • 从嵌套列表或 NumPy 二维数组创建: 需要同时指定列名和索引。

    python
    data_list = [
    [1, 'Alice', 25],
    [2, 'Bob', 30],
    [3, 'Charlie', 22]
    ]
    df3 = pd.DataFrame(data_list, columns=['ID', 'Name', 'Age'])
    print(df3)

  • 从 Series 字典创建:

    “`python
    s_pop = pd.Series([2154, 2428, 1530], index=[‘北京’, ‘上海’, ‘广州’])
    s_area = pd.Series([16411, 6340, 7434], index=[‘北京’, ‘上海’, ‘广州’])

    df4 = pd.DataFrame({‘人口 (万)’: s_pop, ‘面积 (km^2)’: s_area})
    print(df4)
    ``
    注意,如果 Series 的索引不同,DataFrame 会自动对齐索引,没有对齐的位置会填充
    NaN`。

4. DataFrame 的基本操作

一旦创建了 DataFrame,就可以对其进行各种操作。

4.1 查看数据

  • head(n) / tail(n): 查看前 n 行或后 n 行数据(默认 n=5)。

    python
    print(df.head())
    print(df.tail(2))

  • info(): 查看 DataFrame 的摘要信息,包括每列的数据类型、非空值数量和内存使用情况。

    python
    df.info()

  • describe(): 生成描述性统计信息,包括计数、均值、标准差、最小值、最大值以及分位数。

    python
    print(df.describe()) # 只对数值列有效
    print(df.describe(include='all')) # 包含非数值列

  • .index / .columns / .values: 获取行索引、列索引或所有数据的值(作为 NumPy 数组)。

    python
    print(df.index)
    print(df.columns)
    print(df.values)

4.2 选择列

选择 DataFrame 的列非常简单,就像操作字典一样:

“`python

选择单列(返回 Series)

cities = df[‘城市’]
print(cities)
print(type(cities))

选择多列(返回 DataFrame)

subset = df[[‘城市’, ‘人口 (万)’]]
print(subset)
print(type(subset))

使用点语法访问单列(不推荐用于列名包含空格或特殊字符的情况)

print(df.城市)

“`

4.3 选择行:.loc.iloc

这是 Pandas 中非常重要但也容易混淆的部分。Pandas 提供了两种主要的行选择方式:

  • .loc: 基于标签 (Label) 进行索引。你可以使用行索引的标签来选择行。
  • .iloc: 基于整数位置 (Integer-location) 进行索引。类似于 Python 列表或 NumPy 数组的切片,使用从 0 开始的整数位置来选择行。

使用 .loc:

“`python
df_indexed = pd.DataFrame(data, columns=[‘城市’, ‘人口 (万)’, ‘面积 (km^2)’],
index=[‘A’, ‘B’, ‘C’, ‘D’, ‘E’])

选择单行(通过行标签)

row_A = df_indexed.loc[‘A’]
print(row_A)

选择多行(通过行标签列表)

rows_AC = df_indexed.loc[[‘A’, ‘C’]]
print(rows_AC)

基于标签的切片(包含起始和终止标签)

rows_A_C_slice = df_indexed.loc[‘A’:’C’]
print(rows_A_C_slice)

选择特定行和列(通过标签)

value_BC_pop = df_indexed.loc[[‘B’, ‘C’], ‘人口 (万)’]
print(value_BC_pop)

选择所有行,特定列

all_rows_cities_pop = df_indexed.loc[:, [‘城市’, ‘人口 (万)’]]
print(all_rows_cities_pop)

选择单行单列的值

value_A_city = df_indexed.loc[‘A’, ‘城市’]
print(value_A_city)
“`

使用 .iloc:

“`python

使用整数位置选择单行

row_0 = df.iloc[0] # 对应第一行
print(row_0)

使用整数位置选择多行

rows_0_2 = df.iloc[[0, 2]] # 对应第一行和第三行
print(rows_0_2)

基于整数位置的切片(不包含终止位置)

rows_0_to_2_slice = df.iloc[0:2] # 对应第一行和第二行
print(rows_0_to_2_slice)

选择特定行和列(通过整数位置)

value_02_pop = df.iloc[[0, 2], 1] # 第一行和第三行,第二列 (人口)
print(value_02_pop)

选择所有行,特定列(通过整数位置列表)

all_rows_cities_pop_iloc = df.iloc[:, [0, 1]]
print(all_rows_cities_pop_iloc)

选择单行单列的值

value_0_city = df.iloc[0, 0] # 第一行第一列 (城市)
print(value_0_city)
“`

总结 .loc vs .iloc:

  • .loc 使用行标签列标签
  • .iloc 使用行位置列位置(整数,从 0 开始)。
  • 使用切片时,.loc 的终止标签包含在结果中,而 .iloc 的终止位置不包含在结果中,这与 Python 的切片规则一致。

4.4 添加和删除列

  • 添加列: 直接给一个不存在的列名赋值。

    “`python

    添加一个新列 ‘GDP (万亿)’

    df[‘GDP (万亿)’] = [3.0, 3.8, 2.5, 2.7, 1.8]
    print(df)

    添加一个常量列

    df[‘国家’] = ‘中国’
    print(df)

    添加一个基于现有列计算的列

    df[‘人口密度 (人/km^2)’] = df[‘人口 (万)’] * 10000 / df[‘面积 (km^2)’]
    print(df)
    “`

  • 删除列: 使用 drop() 方法或 del 关键字。drop() 更常用,因为它返回一个新 DataFrame,而不会修改原始 DataFrame(除非指定 inplace=True)。

    “`python

    使用 drop 删除单列 (axis=1 表示列)

    df_no_gdp = df.drop(‘GDP (万亿)’, axis=1)
    print(df_no_gdp)

    使用 drop 删除多列

    df_subset = df.drop([‘国家’, ‘人口密度 (人/km^2)’], axis=1)
    print(df_subset)

    使用 inplace=True 直接修改原始 DataFrame

    df.drop(‘国家’, axis=1, inplace=True)

    print(df)

    使用 del 关键字删除列 (直接修改原始 DataFrame)

    del df[‘国家’]

    print(df)

    ``
    注意
    drop()默认删除行 (axis=0),删除列必须指定axis=1`。

4.5 处理缺失数据 (NaN)

缺失数据是数据分析中常见的问题。Pandas 使用 NaN (Not a Number) 来表示缺失值。

  • 检查缺失值: isnull()isna() 返回一个布尔型 DataFrame,notnull() 返回非缺失值的布尔型 DataFrame。sum() 可以统计每列的缺失值数量。

    “`python

    制造一些缺失值

    df_missing = df.copy()
    df_missing.loc[[0, 3], ‘人口 (万)’] = np.nan
    df_missing.loc[2, ‘面积 (km^2)’] = np.nan
    df_missing.loc[1, ‘GDP (万亿)’] = np.nan

    print(df_missing)

    print(“\n检查缺失值:”)
    print(df_missing.isnull())

    print(“\n每列缺失值数量:”)
    print(df_missing.isnull().sum())
    “`

  • 删除缺失值: dropna() 可以删除包含缺失值的行或列。

    “`python

    删除包含任何缺失值的行 (axis=0, default)

    df_dropped_rows = df_missing.dropna()
    print(“\n删除包含缺失值的行:”)
    print(df_dropped_rows)

    删除包含任何缺失值的列 (axis=1)

    df_dropped_cols = df_missing.dropna(axis=1)
    print(“\n删除包含缺失值的列:”)
    print(df_dropped_cols)

    删除所有值都是缺失值的行或列 (how=’all’)

    df_dropped_all = df_missing.dropna(how=’all’) # 如果某行/列所有值都缺失才删除
    print(“\n删除所有值都是缺失值的行:”)
    print(df_dropped_all)

    删除指定列中包含缺失值的行

    df_dropped_subset = df_missing.dropna(subset=[‘人口 (万)’, ‘面积 (km^2)’])
    print(“\n删除指定列中包含缺失值的行:”)
    print(df_dropped_subset)
    “`

  • 填充缺失值: fillna() 可以用指定的值或方法填充缺失值。

    “`python

    用固定值填充

    df_filled_0 = df_missing.fillna(0)
    print(“\n用 0 填充缺失值:”)
    print(df_filled_0)

    用该列的均值填充

    mean_pop = df_missing[‘人口 (万)’].mean()
    df_filled_mean = df_missing.fillna({‘人口 (万)’: mean_pop, ‘面积 (km^2)’: df_missing[‘面积 (km^2)’].mean()})
    print(“\n用列均值填充缺失值:”)
    print(df_filled_mean)

    使用前向填充 (用前一个非缺失值填充)

    df_filled_ffill = df_missing.fillna(method=’ffill’)
    print(“\n前向填充:”)
    print(df_filled_ffill)

    使用后向填充 (用后一个非缺失值填充)

    df_filled_bfill = df_missing.fillna(method=’bfill’)
    print(“\n后向填充:”)
    print(df_filled_bfill)
    ``fillna默认也返回新 DataFrame,使用inplace=True` 修改原始 DataFrame。

4.6 排序

你可以按照索引或按照列的值对 DataFrame 进行排序。

  • 按照索引排序: sort_index()

    “`python

    按照行索引排序

    df_indexed_sorted_index = df_indexed.sort_index()
    print(“\n按照行索引排序:”)
    print(df_indexed_sorted_index)

    按照列索引排序

    df_indexed_sorted_cols = df_indexed.sort_index(axis=1)
    print(“\n按照列索引排序 (列名):”)
    print(df_indexed_sorted_cols)

    降序排序

    df_indexed_sorted_index_desc = df_indexed.sort_index(ascending=False)
    print(“\n按照行索引降序排序:”)
    print(df_indexed_sorted_index_desc)
    “`

  • 按照值排序: sort_values()

    “`python

    按照单列的值排序

    df_sorted_pop = df.sort_values(by=’人口 (万)’, ascending=False)
    print(“\n按照人口降序排序:”)
    print(df_sorted_pop)

    按照多列的值排序 (先按第一列,后按第二列)

    df_sorted_multi = df.sort_values(by=[‘人口 (万)’, ‘面积 (km^2)’], ascending=[False, True])
    print(“\n先按人口降序,再按面积升序排序:”)
    print(df_sorted_multi)
    “`

4.7 过滤数据 (布尔索引)

使用布尔数组来选择数据子集是 Pandas 中非常强大的功能。

“`python

选择人口大于 1500 万的城市

df_large_pop = df[df[‘人口 (万)’] > 1500]
print(“\n人口大于 1500 万的城市:”)
print(df_large_pop)

选择面积小于 10000 km^2 且 人口大于 2000 万的城市

注意使用 & (and) 和 | (or) 连接条件,并且每个条件都要用括号括起来

df_specific = df[(df[‘面积 (km^2)’] < 10000) & (df[‘人口 (万)’] > 2000)]
print(“\n面积小于 10000 且人口大于 2000 万的城市:”)
print(df_specific)

使用 isin() 过滤

cities_to_select = [‘北京’, ‘深圳’]
df_isin = df[df[‘城市’].isin(cities_to_select)]
print(“\n使用 isin 过滤 (北京和深圳):”)
print(df_isin)

结合 .loc 进行过滤和选择列

df_filtered_subset = df.loc[df[‘人口 (万)’] > 1500, [‘城市’, ‘人口 (万)’]]
print(“\n过滤并选择部分列:”)
print(df_filtered_subset)
“`

5. 数据聚合:Group By

groupby() 是 Pandas 中用于数据聚合(例如,计算分组平均值、总和等)的核心方法。它的工作原理类似于 SQL 的 GROUP BY 语句。

groupby 操作通常遵循“分割-应用-合并”(split-apply-combine)的模式:

  1. 分割 (Split): 根据某个或多个键将数据分割成组。
  2. 应用 (Apply): 对每个组独立地应用一个函数(如聚合、转换或过滤)。
  3. 合并 (Combine): 将应用函数后的结果合并成一个新的 DataFrame 或 Series。

示例数据:

python
data_sales = {
'部门': ['电子', '服饰', '电子', '服饰', '电子', '服饰'],
'季度': ['Q1', 'Q1', 'Q2', 'Q2', 'Q3', 'Q3'],
'销售额': [1000, 800, 1200, 900, 1500, 1100]
}
df_sales = pd.DataFrame(data_sales)
print(df_sales)

使用 groupby():

  • 按单列分组并计算总和:

    “`python

    按部门分组,计算各部门的总销售额

    sales_by_dept = df_sales.groupby(‘部门’)[‘销售额’].sum()
    print(“\n按部门分组的总销售额:”)
    print(sales_by_dept)
    print(type(sales_by_dept)) # 结果是 Series
    ``
    这里,
    df_sales.groupby(‘部门’)创建了一个 groupby 对象,然后我们选择了 '销售额' 列,并应用了sum()` 聚合函数。

  • 按单列分组并计算多种聚合: 使用 agg()aggregate()

    “`python

    按部门分组,计算各部门的销售总额和平均销售额

    sales_agg_dept = df_sales.groupby(‘部门’)[‘销售额’].agg([‘sum’, ‘mean’, ‘count’])
    print(“\n按部门分组,计算总额、均值和计数:”)
    print(sales_agg_dept)
    “`

  • 按多列分组:

    “`python

    按部门和季度分组,计算各组的总销售额

    sales_by_dept_quarter = df_sales.groupby([‘部门’, ‘季度’])[‘销售额’].sum()
    print(“\n按部门和季度分组的总销售额:”)
    print(sales_by_dept_quarter)
    print(type(sales_by_dept_quarter)) # 结果是 Series (带有 MultiIndex)
    “`

  • 对分组后的多列应用不同聚合:

    “`python

    假设我们还有一个 ‘成本’ 列

    df_sales[‘成本’] = [500, 400, 600, 450, 700, 550]

    按部门分组,销售额算总和,成本算平均值

    sales_cost_agg = df_sales.groupby(‘部门’).agg({‘销售额’: ‘sum’, ‘成本’: ‘mean’})
    print(“\n按部门分组,销售额总和,成本均值:”)
    print(sales_cost_agg)
    “`

groupby 是 Pandas 数据处理中最强大的工具之一,掌握它对于进行复杂的数据分析至关重要。

6. 读取和写入数据

在实际工作中,数据通常存储在文件中(如 CSV, Excel, JSON 等)。Pandas 提供了方便的函数来读取和写入这些文件。

  • 读取 CSV 文件: pd.read_csv()

    “`python

    假设有一个名为 ‘data.csv’ 的文件

    data.csv 内容示例:

    city,population,area

    Beijing,2154,16411

    Shanghai,2428,6340

    Guangzhou,1530,7434

    # 读取 CSV 文件

    try:

    df_csv = pd.read_csv(‘data.csv’)

    print(“\n从 CSV 文件读取:”)

    print(df_csv)

    except FileNotFoundError:

    print(“\n文件 data.csv 未找到,跳过读取示例.”)

    # 读取时指定某一列作为索引

    # df_csv_indexed = pd.read_csv(‘data.csv’, index_col=’city’)

    # print(“\n从 CSV 文件读取并设置索引:”)

    # print(df_csv_indexed)

    ``read_csv有很多参数,可以控制分隔符 (sep)、是否有表头 (header)、编码 (encoding`) 等。

  • 读取 Excel 文件: pd.read_excel()

    “`python

    假设有一个名为 ‘data.xlsx’ 的文件

    # 读取 Excel 文件 (需要安装 openpyxl 或 xlrd 库: pip install openpyxl xlrd)

    try:

    df_excel = pd.read_excel(‘data.xlsx’, sheet_name=’Sheet1′) # 可以指定 sheet_name

    print(“\n从 Excel 文件读取:”)

    print(df_excel)

    except FileNotFoundError:

    print(“\n文件 data.xlsx 未找到,跳过读取示例.”)

    except Exception as e:

    print(f”\n读取 Excel 文件时出错: {e} (请确保已安装 openpyxl 或 xlrd)”)

    “`

  • 写入 CSV 文件: df.to_csv()

    “`python

    将 DataFrame 写入 CSV 文件

    index=False 表示不将 DataFrame 的行索引写入文件

    df.to_csv(‘output.csv’, index=False)

    print(“\nDataFrame 已写入到 output.csv”)

    “`

  • 写入 Excel 文件: df.to_excel()

    “`python

    将 DataFrame 写入 Excel 文件 (需要安装 openpyxl 库)

    df.to_excel(‘output.xlsx’, index=False, sheet_name=’结果’)

    print(“\nDataFrame 已写入到 output.xlsx”)

    “`

Pandas 还支持读写其他格式,如 JSON (read_json, to_json)、HTML 表格 (read_html, to_html) 等。

7. 更多高级操作 (简要介绍)

  • 合并与连接 (Merge/Join): 将两个或多个 DataFrame 根据共同的列或索引组合在一起。类似于数据库的 JOIN 操作。pd.merge() 是常用的函数。

    “`python

    示例:合并两个 DataFrame

    df1 = pd.DataFrame({‘key’: [‘A’, ‘B’, ‘C’, ‘D’], ‘value1’: [1, 2, 3, 4]})
    df2 = pd.DataFrame({‘key’: [‘C’, ‘D’, ‘E’, ‘F’], ‘value2’: [5, 6, 7, 8]})

    merged_df = pd.merge(df1, df2, on=’key’, how=’inner’) # inner join
    print(“\n合并 DataFrame:”)
    print(merged_df)
    “`

  • 时间序列 (Time Series): Pandas 对时间序列数据有强大的支持,包括日期范围生成、频率转换、移动窗口计算等。

  • 数据转换 (Transformation): 使用 apply(), map(), applymap() 等方法对 DataFrame 或 Series 的元素、行或列应用函数。

  • 透视表 (Pivot Table): 类似于 Excel 的数据透视表,用于对数据进行重塑和汇总。pd.pivot_table()

8. 总结与下一步

恭喜你!通过这篇教程,你已经从零开始掌握了 Pandas 的核心概念(Series 和 DataFrame)以及一系列基本但至关重要的数据操作,包括:

  • 创建 Series 和 DataFrame
  • 查看和探索数据
  • 选择和过滤数据(包括 .loc.iloc
  • 添加和删除列
  • 处理缺失值
  • 排序数据
  • 使用 groupby 进行数据聚合
  • 读取和写入文件

Pandas 的功能远不止于此。这只是一个起点。要真正精通 Pandas,你需要:

  • 持续练习: 找一些真实世界的数据集(如 Kaggle 上的数据集),尝试使用 Pandas 进行数据清洗和初步分析。
  • 深入学习文档: Pandas 官方文档(https://pandas.pydata.org/docs/)是最好的学习资源,它非常详细。
  • 学习更多高级功能: 了解如何处理时间序列数据、使用 MultiIndex、进行数据重塑(pivot, melt, stack, unstack)等。
  • 结合其他库使用: 学习如何将 Pandas 与 Matplotlib/Seaborn 进行数据可视化,与 Scikit-learn 进行机器学习预处理等。

数据处理是数据科学流程中最耗时但也最关键的部分。掌握 Pandas 将极大地提高你的工作效率和数据分析能力。

开始你的 Pandas 实践之旅吧!

发表评论

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

滚动至顶部