【机器学习】快速入门!关于 Pandas 库的简介和常用方法整理

发布时间:2023年12月31日

Pandas 简介

Pandas 是一个开源数据分析和数据操作的Python库。它提供了数据结构,如 Series 和 DataFrame,用于处理和分析结构化数据。Pandas 的设计是为了使数据清洗和分析变得更加快速、简单和直观。

主要的 Pandas 数据结构包括:

  1. Series: 一维标记数组,类似于带有标签的 NumPy 数组。可以包含任何数据类型。

  2. DataFrame: 二维表格数据结构,类似于关系型数据库中的表格或 Excel 表格。是 Pandas 中最常用的数据结构,可以将多个 Series 按列组合而成。

Pandas 提供了许多功能,包括:

  • 数据的加载和存储:Pandas 支持多种数据格式,包括 CSV、Excel、SQL、JSON 等。

  • 数据清洗:处理缺失值、重复值、异常值等。

  • 数据选择和过滤:通过标签或位置选择和过滤数据。

  • 数据统计和汇总:计算各种统计量、汇总数据。

  • 数据合并和连接:合并不同数据源的数据。

  • 时间序列处理:支持时间序列数据的处理和分析。

Pandas 是进行数据分析和预处理的强大工具,尤其在数据科学和机器学习领域得到了广泛的应用。它构建在 NumPy 的基础上,为数据分析提供了更高级的、更易用的接口。

1. 数据加载和存储

在 Pandas 中,你可以使用不同的函数来加载和存储各种数据格式,包括 CSV、Excel、SQL、JSON 等。以下是一些建议的方法:

加载数据:

  1. 从 CSV 文件加载数据:
    使用 pd.read_csv() 函数加载 CSV 文件。

    import pandas as pd
    
    # 从 CSV 文件加载数据
    df = pd.read_csv('file.csv')
    
  2. 从 Excel 文件加载数据:
    使用 pd.read_excel() 函数加载 Excel 文件。

    import pandas as pd
    
    # 从 Excel 文件加载数据
    df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
    
  3. 从 SQL 数据库加载数据:
    使用 pd.read_sql() 函数加载 SQL 数据库中的数据。

    import pandas as pd
    from sqlalchemy import create_engine
    
    # 创建数据库连接
    engine = create_engine('sqlite:///:memory:')
    
    # 从 SQL 数据库加载数据
    df = pd.read_sql('SELECT * FROM table_name', con=engine)
    
  4. 从 JSON 文件加载数据:
    使用 pd.read_json() 函数加载 JSON 文件。

    import pandas as pd
    
    # 从 JSON 文件加载数据
    df = pd.read_json('file.json')
    

存储数据:

  1. 存储为 CSV 文件:
    使用 to_csv() 方法将数据保存为 CSV 文件。

    # 存储为 CSV 文件
    df.to_csv('output.csv', index=False)
    
  2. 存储为 Excel 文件:
    使用 to_excel() 方法将数据保存为 Excel 文件。

    # 存储为 Excel 文件
    df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
    
  3. 存储到 SQL 数据库:
    使用 to_sql() 方法将数据保存到 SQL 数据库中。

    from sqlalchemy import create_engine
    
    # 创建数据库连接
    engine = create_engine('sqlite:///:memory:')
    
    # 存储到 SQL 数据库
    df.to_sql('table_name', con=engine, index=False, if_exists='replace')
    
  4. 存储为 JSON 文件:
    使用 to_json() 方法将数据保存为 JSON 文件。

    # 存储为 JSON 文件
    df.to_json('output.json', orient='records')
    

这些是一些建议的方法,但 Pandas 支持的数据格式和存储方法远不止这些。具体的选择取决于你的数据格式和存储需求。在使用这些方法时,请注意适当配置参数以满足你的具体情况。

2. 数据清洗

数据清洗是数据分析和建模过程中至关重要的一步,旨在处理数据集中的缺失值、异常值和重复值,以确保数据的质量和可靠性。以下是一些建议的数据清洗步骤:

  1. 处理缺失值:

    • 使用 isnull()sum() 方法查找缺失值的数量。
    • 使用 dropna() 方法删除包含缺失值的行或列。
    • 使用填充方法,如 fillna(),以替换缺失值。
    # 查找缺失值的数量
    print(df.isnull().sum())
    
    # 删除包含缺失值的行
    df = df.dropna()
    
    # 填充缺失值
    df['column_name'].fillna(value, inplace=True)
    
  2. 处理重复值:

    • 使用 duplicated() 方法查找和处理重复值。
    • 使用 drop_duplicates() 方法删除重复行。
    # 查找重复值
    print(df.duplicated().sum())
    
    # 删除重复行
    df = df.drop_duplicates()
    
  3. 处理异常值:

    • 使用可视化工具(如箱线图)来检测异常值。
    • 使用统计方法,如 Z 分数或 IQR 方法来标识和处理异常值。
    # 使用 Z 分数检测异常值
    z_scores = (df['column_name'] - df['column_name'].mean()) / df['column_name'].std()
    df_no_outliers = df[(z_scores < 3) & (z_scores > -3)]
    
  4. 格式化数据类型:

    • 使用 astype() 方法将列的数据类型更改为正确的类型。
    • 使用 to_datetime() 方法将日期字符串转换为日期类型。
    # 将列的数据类型更改为整数
    df['column_name'] = df['column_name'].astype(int)
    
    # 将日期字符串转换为日期类型
    df['date_column'] = pd.to_datetime(df['date_column'])
    
  5. 处理不一致的数据:

    • 标准化文本数据,确保统一的格式。
    • 使用 str.replace() 方法替换不一致的文本。
    # 标准化文本数据
    df['text_column'] = df['text_column'].str.lower()
    
    # 替换不一致的文本
    df['text_column'] = df['text_column'].str.replace('old_value', 'new_value')
    

这些是一些基本的数据清洗步骤,具体的清洗过程取决于数据集的特性和问题的性质。在清洗数据时,保持文档记录清洗步骤,并在必要时创建备份以避免不可逆的更改。

3. 数据统计和汇总

在数据分析中,数据统计和汇总是了解数据集特征和提取有用信息的关键步骤。Pandas 提供了丰富的功能来进行数据统计和汇总。以下是一些建议的方法:

  1. 描述性统计信息:
    使用 describe() 方法可以获取数据集的描述性统计信息,包括均值、标准差、最小值、最大值等。

    # 描述性统计信息
    print(df.describe())
    
  2. 计数和唯一值:
    使用 value_counts() 方法可以计算每个唯一值的频数。

    # 计数唯一值
    print(df['column_name'].value_counts())
    
  3. 汇总统计信息:
    使用 groupby() 和聚合函数(如 sum()mean()median() 等)可以对数据进行分组汇总。

    # 按列进行分组,并计算每组的总和
    grouped_data = df.groupby('group_column')['numeric_column'].sum()
    
  4. 相关性分析:
    使用 corr() 方法可以计算数据集中各列的相关性系数矩阵。

    # 相关性矩阵
    correlation_matrix = df.corr()
    
  5. 缺失值统计:
    使用 isnull()sum() 方法可以统计每列的缺失值数量。

    # 缺失值统计
    print(df.isnull().sum())
    
  6. 自定义汇总:
    使用自定义的聚合函数,例如 agg() 方法,可以根据需要计算不同的统计信息。

    # 自定义汇总
    summary = df['numeric_column'].agg(['mean', 'std', 'min', 'max'])
    
  7. 透视表:
    使用 pivot_table() 方法可以创建透视表,对数据进行多维度的汇总。

    # 创建透视表
    pivot_table = pd.pivot_table(df, values='value_column', index='index_column', columns='column_to_pivot', aggfunc='mean')
    

这些方法可以根据具体的数据集和分析任务进行调整和组合。在进行统计和汇总之前,确保对数据有清晰的理解,并根据问题的需求选择适当的统计方法。

4. 数据选择和过滤

在 Pandas 中,数据选择和过滤是通过索引、切片、条件过滤等方式来进行的。以下是一些建议的方法:

  1. 通过列名选择列:
    使用列名,你可以选择一个或多个列。

    # 选择单列
    single_column = df['column_name']
    
    # 选择多列
    multiple_columns = df[['column1', 'column2']]
    
  2. 通过行号选择行:
    使用 iloc 方法可以按行号选择行。

    # 选择单行
    single_row = df.iloc[0]
    
    # 选择多行
    multiple_rows = df.iloc[1:4]
    
  3. 通过标签选择行:
    使用 loc 方法可以按标签选择行。

    # 选择单行
    single_row = df.loc['label']
    
    # 选择多行
    multiple_rows = df.loc[['label1', 'label2']]
    
  4. 通过条件过滤:
    使用条件语句过滤数据。

    # 根据条件过滤
    filtered_data = df[df['column_name'] > 10]
    
  5. 使用逻辑运算符:
    使用逻辑运算符(如 &|~)组合多个条件。

    # 组合条件
    filtered_data = df[(df['column1'] > 10) & (df['column2'] < 5)]
    
  6. 使用 isin() 方法:
    使用 isin() 方法过滤数据,检查某列是否包含特定值。

    # 使用 isin() 方法
    filtered_data = df[df['column_name'].isin(['value1', 'value2'])]
    
  7. 根据字符串条件过滤:
    使用字符串方法过滤数据,例如使用 str.contains()

    # 根据字符串条件过滤
    filtered_data = df[df['column_name'].str.contains('substring')]
    

这些是一些基本的数据选择和过滤方法。在进行数据选择和过滤时,请确保理解数据的结构和内容,并根据具体的分析任务选择适当的方法。

5. 数据合并和连接

在 Pandas 中,数据合并和连接是将多个数据集组合成一个数据集的关键操作。以下是一些建议的方法:

  1. 使用 merge() 进行合并:
    merge() 函数用于基于一个或多个键将两个数据框合并。默认情况下,它执行的是内连接(inner join)。

    # 使用 merge 进行合并
    merged_data = pd.merge(df1, df2, on='common_column')
    

    这将在两个数据框中的共同列上执行内连接。

  2. 指定合并方式:
    使用 how 参数可以指定合并方式,包括 'left''right''outer' 等。

    # 指定合并方式
    merged_data = pd.merge(df1, df2, on='common_column', how='left')
    

    这将执行左连接,保留左边数据框的所有行。

  3. 使用 concat() 进行连接:
    concat() 函数用于按行或列将多个数据框连接在一起。

    # 使用 concat 进行连接
    concatenated_data = pd.concat([df1, df2], axis=0)
    

    这将按行连接两个数据框。

  4. 使用 join() 方法:
    join() 方法用于将两个数据框基于索引进行连接。

    # 使用 join 进行连接
    joined_data = df1.join(df2, how='inner')
    

    这将执行内连接,基于索引进行合并。

  5. 合并多个数据框:
    可以多次使用 merge()concat() 函数来合并多个数据框。

    # 合并多个数据框
    merged_data = pd.merge(df1, pd.merge(df2, df3, on='common_column'), on='common_column')
    

    这将依次合并三个数据框。

这些方法提供了多样化的选项,以满足不同的合并和连接需求。在进行数据合并和连接时,请确保了解数据的关系和结构,并根据任务选择适当的方法。

6. 时间序列处理

Pandas 提供了强大的时间序列处理功能,使得对时间序列数据进行分析和操作变得相对容易。以下是一些建议的时间序列处理方法:

创建时间序列数据:

  1. 生成日期范围:
    使用 pd.date_range() 函数生成一个日期范围。

    import pandas as pd
    
    # 生成日期范围
    date_range = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')
    
  2. 将列转换为日期类型:
    使用 pd.to_datetime() 函数将列转换为日期时间类型。

    # 将列转换为日期时间类型
    df['date_column'] = pd.to_datetime(df['date_column'])
    

索引和选择:

  1. 按日期选择数据:
    使用日期作为索引,可以轻松选择特定日期范围的数据。

    # 按日期选择数据
    df = df.set_index('date_column')
    selected_data = df['2022-01-01':'2022-01-10']
    
  2. 按时间间隔切片:
    使用 resample() 方法可以对时间序列数据进行重采样,例如按天、周、月等进行汇总。

    # 按周重采样
    weekly_data = df.resample('W').sum()
    

时间序列分析:

  1. 计算滚动统计量:
    使用 rolling() 方法计算滚动平均、滚动总和等。

    # 计算滚动平均
    rolling_mean = df['column'].rolling(window=7).mean()
    
  2. 时序差分:
    使用 diff() 方法计算时序差分,以处理非平稳时间序列。

    # 计算时序差分
    differenced_data = df['column'].diff()
    

时间序列可视化:

  1. 绘制时间序列图:
    使用 plot() 方法绘制时间序列图。

    # 绘制时间序列图
    df['column'].plot(figsize=(10, 6), title='Time Series Plot')
    
  2. 绘制滚动统计图:
    绘制滚动统计图以可视化趋势。

    # 绘制滚动平均图
    df['column'].rolling(window=7).mean().plot(figsize=(10, 6), title='Rolling Mean Plot')
    

这些方法可以帮助你对时间序列数据进行处理、分析和可视化。根据具体的需求,你可能需要进一步了解时间序列分析的方法和技术。

7. 其他常用函数

train.head()

train.head() 是一个 pandas 数据框(DataFrame)的方法,用于显示数据框的前几行数据。这个方法返回数据框的前几行,通常默认显示前5行。这对于快速查看数据集的结构、了解数据的特征以及检查数据导入的正确性非常有用。

例如,如果你有一个名为 train 的 pandas 数据框,通过执行 train.head(),你将看到数据框的前5行。示例代码如下:

import pandas as pd

# 假设 train 是一个 pandas 数据框
train = pd.read_csv('your_dataset.csv')

# 显示数据框的前5行
print(train.head())

输出结果将是数据框的前5行,每行代表数据集中的一个样本,每列代表不同的特征。这样的预览有助于了解数据的结构,确保数据的导入和处理是正确的。

如果你想查看更多行,你可以在 head() 方法中传递一个整数参数,例如 train.head(10) 将显示前10行数据。

train.info()

train.info() 是 pandas 数据框(DataFrame)的一个方法,用于提供关于数据框的详细信息。这个方法返回一个关于数据框的摘要,包括每列的非空值数量、数据类型以及内存使用情况等信息。

示例代码如下:

import pandas as pd

# 假设 train 是一个 pandas 数据框
train = pd.read_csv('your_dataset.csv')

# 显示数据框的信息
print(train.info())

输出结果将包括以下信息:

  1. 数据框的总行数和总列数: 例如,“RangeIndex: 1000 entries, 0 to 999” 表示数据框有1000行。

  2. 每列的名称和非空值数量: 例如,“age 1000 non-null int64” 表示 “age” 列有1000个非空值,数据类型为整数。

  3. 每列的数据类型: 例如,“age int64” 表示 “age” 列的数据类型是整数。

  4. 内存使用情况: 例如,“memory usage: 78.2 KB” 表示该数据框占用了78.2千字节的内存。

train.info() 是一个非常有用的方法,可以帮助你快速了解数据框的结构、特征和缺失值情况。这对于数据清理和预处理阶段是至关重要的。

写在最后

本文采用了 ChatGPT 辅助进行内容的书写和完善

文章来源:https://blog.csdn.net/qq_35353673/article/details/135318105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。