【机器学习】快速入门!关于 Pandas 库的简介和常用方法整理
Pandas
Pandas 简介
Pandas 是一个开源数据分析和数据操作的Python库。它提供了数据结构,如 Series 和 DataFrame,用于处理和分析结构化数据。Pandas 的设计是为了使数据清洗和分析变得更加快速、简单和直观。
主要的 Pandas 数据结构包括:
-
Series: 一维标记数组,类似于带有标签的 NumPy 数组。可以包含任何数据类型。
-
DataFrame: 二维表格数据结构,类似于关系型数据库中的表格或 Excel 表格。是 Pandas 中最常用的数据结构,可以将多个 Series 按列组合而成。
Pandas 提供了许多功能,包括:
-
数据的加载和存储:Pandas 支持多种数据格式,包括 CSV、Excel、SQL、JSON 等。
-
数据清洗:处理缺失值、重复值、异常值等。
-
数据选择和过滤:通过标签或位置选择和过滤数据。
-
数据统计和汇总:计算各种统计量、汇总数据。
-
数据合并和连接:合并不同数据源的数据。
-
时间序列处理:支持时间序列数据的处理和分析。
Pandas 是进行数据分析和预处理的强大工具,尤其在数据科学和机器学习领域得到了广泛的应用。它构建在 NumPy 的基础上,为数据分析提供了更高级的、更易用的接口。
1. 数据加载和存储
在 Pandas 中,你可以使用不同的函数来加载和存储各种数据格式,包括 CSV、Excel、SQL、JSON 等。以下是一些建议的方法:
加载数据:
-
从 CSV 文件加载数据:
使用pd.read_csv()
函数加载 CSV 文件。import pandas as pd # 从 CSV 文件加载数据 df = pd.read_csv('file.csv')
-
从 Excel 文件加载数据:
使用pd.read_excel()
函数加载 Excel 文件。import pandas as pd # 从 Excel 文件加载数据 df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
-
从 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)
-
从 JSON 文件加载数据:
使用pd.read_json()
函数加载 JSON 文件。import pandas as pd # 从 JSON 文件加载数据 df = pd.read_json('file.json')
存储数据:
-
存储为 CSV 文件:
使用to_csv()
方法将数据保存为 CSV 文件。# 存储为 CSV 文件 df.to_csv('output.csv', index=False)
-
存储为 Excel 文件:
使用to_excel()
方法将数据保存为 Excel 文件。# 存储为 Excel 文件 df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
-
存储到 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')
-
存储为 JSON 文件:
使用to_json()
方法将数据保存为 JSON 文件。# 存储为 JSON 文件 df.to_json('output.json', orient='records')
这些是一些建议的方法,但 Pandas 支持的数据格式和存储方法远不止这些。具体的选择取决于你的数据格式和存储需求。在使用这些方法时,请注意适当配置参数以满足你的具体情况。
2. 数据清洗
数据清洗是数据分析和建模过程中至关重要的一步,旨在处理数据集中的缺失值、异常值和重复值,以确保数据的质量和可靠性。以下是一些建议的数据清洗步骤:
-
处理缺失值:
- 使用
isnull()
和sum()
方法查找缺失值的数量。 - 使用
dropna()
方法删除包含缺失值的行或列。 - 使用填充方法,如
fillna()
,以替换缺失值。
# 查找缺失值的数量 print(df.isnull().sum()) # 删除包含缺失值的行 df = df.dropna() # 填充缺失值 df['column_name'].fillna(value, inplace=True)
- 使用
-
处理重复值:
- 使用
duplicated()
方法查找和处理重复值。 - 使用
drop_duplicates()
方法删除重复行。
# 查找重复值 print(df.duplicated().sum()) # 删除重复行 df = df.drop_duplicates()
- 使用
-
处理异常值:
- 使用可视化工具(如箱线图)来检测异常值。
- 使用统计方法,如 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)]
-
格式化数据类型:
- 使用
astype()
方法将列的数据类型更改为正确的类型。 - 使用
to_datetime()
方法将日期字符串转换为日期类型。
# 将列的数据类型更改为整数 df['column_name'] = df['column_name'].astype(int) # 将日期字符串转换为日期类型 df['date_column'] = pd.to_datetime(df['date_column'])
- 使用
-
处理不一致的数据:
- 标准化文本数据,确保统一的格式。
- 使用
str.replace()
方法替换不一致的文本。
# 标准化文本数据 df['text_column'] = df['text_column'].str.lower() # 替换不一致的文本 df['text_column'] = df['text_column'].str.replace('old_value', 'new_value')
这些是一些基本的数据清洗步骤,具体的清洗过程取决于数据集的特性和问题的性质。在清洗数据时,保持文档记录清洗步骤,并在必要时创建备份以避免不可逆的更改。
3. 数据统计和汇总
在数据分析中,数据统计和汇总是了解数据集特征和提取有用信息的关键步骤。Pandas 提供了丰富的功能来进行数据统计和汇总。以下是一些建议的方法:
-
描述性统计信息:
使用describe()
方法可以获取数据集的描述性统计信息,包括均值、标准差、最小值、最大值等。# 描述性统计信息 print(df.describe())
-
计数和唯一值:
使用value_counts()
方法可以计算每个唯一值的频数。# 计数唯一值 print(df['column_name'].value_counts())
-
汇总统计信息:
使用groupby()
和聚合函数(如sum()
、mean()
、median()
等)可以对数据进行分组汇总。# 按列进行分组,并计算每组的总和 grouped_data = df.groupby('group_column')['numeric_column'].sum()
-
相关性分析:
使用corr()
方法可以计算数据集中各列的相关性系数矩阵。# 相关性矩阵 correlation_matrix = df.corr()
-
缺失值统计:
使用isnull()
和sum()
方法可以统计每列的缺失值数量。# 缺失值统计 print(df.isnull().sum())
-
自定义汇总:
使用自定义的聚合函数,例如agg()
方法,可以根据需要计算不同的统计信息。# 自定义汇总 summary = df['numeric_column'].agg(['mean', 'std', 'min', 'max'])
-
透视表:
使用pivot_table()
方法可以创建透视表,对数据进行多维度的汇总。# 创建透视表 pivot_table = pd.pivot_table(df, values='value_column', index='index_column', columns='column_to_pivot', aggfunc='mean')
这些方法可以根据具体的数据集和分析任务进行调整和组合。在进行统计和汇总之前,确保对数据有清晰的理解,并根据问题的需求选择适当的统计方法。
4. 数据选择和过滤
在 Pandas 中,数据选择和过滤是通过索引、切片、条件过滤等方式来进行的。以下是一些建议的方法:
-
通过列名选择列:
使用列名,你可以选择一个或多个列。# 选择单列 single_column = df['column_name'] # 选择多列 multiple_columns = df[['column1', 'column2']]
-
通过行号选择行:
使用iloc
方法可以按行号选择行。# 选择单行 single_row = df.iloc[0] # 选择多行 multiple_rows = df.iloc[1:4]
-
通过标签选择行:
使用loc
方法可以按标签选择行。# 选择单行 single_row = df.loc['label'] # 选择多行 multiple_rows = df.loc[['label1', 'label2']]
-
通过条件过滤:
使用条件语句过滤数据。# 根据条件过滤 filtered_data = df[df['column_name'] > 10]
-
使用逻辑运算符:
使用逻辑运算符(如&
、|
、~
)组合多个条件。# 组合条件 filtered_data = df[(df['column1'] > 10) & (df['column2'] < 5)]
-
使用
isin()
方法:
使用isin()
方法过滤数据,检查某列是否包含特定值。# 使用 isin() 方法 filtered_data = df[df['column_name'].isin(['value1', 'value2'])]
-
根据字符串条件过滤:
使用字符串方法过滤数据,例如使用str.contains()
。# 根据字符串条件过滤 filtered_data = df[df['column_name'].str.contains('substring')]
这些是一些基本的数据选择和过滤方法。在进行数据选择和过滤时,请确保理解数据的结构和内容,并根据具体的分析任务选择适当的方法。
5. 数据合并和连接
在 Pandas 中,数据合并和连接是将多个数据集组合成一个数据集的关键操作。以下是一些建议的方法:
-
使用
merge()
进行合并:
merge()
函数用于基于一个或多个键将两个数据框合并。默认情况下,它执行的是内连接(inner join)。# 使用 merge 进行合并 merged_data = pd.merge(df1, df2, on='common_column')
这将在两个数据框中的共同列上执行内连接。
-
指定合并方式:
使用how
参数可以指定合并方式,包括'left'
、'right'
、'outer'
等。# 指定合并方式 merged_data = pd.merge(df1, df2, on='common_column', how='left')
这将执行左连接,保留左边数据框的所有行。
-
使用
concat()
进行连接:
concat()
函数用于按行或列将多个数据框连接在一起。# 使用 concat 进行连接 concatenated_data = pd.concat([df1, df2], axis=0)
这将按行连接两个数据框。
-
使用
join()
方法:
join()
方法用于将两个数据框基于索引进行连接。# 使用 join 进行连接 joined_data = df1.join(df2, how='inner')
这将执行内连接,基于索引进行合并。
-
合并多个数据框:
可以多次使用merge()
或concat()
函数来合并多个数据框。# 合并多个数据框 merged_data = pd.merge(df1, pd.merge(df2, df3, on='common_column'), on='common_column')
这将依次合并三个数据框。
这些方法提供了多样化的选项,以满足不同的合并和连接需求。在进行数据合并和连接时,请确保了解数据的关系和结构,并根据任务选择适当的方法。
6. 时间序列处理
Pandas 提供了强大的时间序列处理功能,使得对时间序列数据进行分析和操作变得相对容易。以下是一些建议的时间序列处理方法:
创建时间序列数据:
-
生成日期范围:
使用pd.date_range()
函数生成一个日期范围。import pandas as pd # 生成日期范围 date_range = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')
-
将列转换为日期类型:
使用pd.to_datetime()
函数将列转换为日期时间类型。# 将列转换为日期时间类型 df['date_column'] = pd.to_datetime(df['date_column'])
索引和选择:
-
按日期选择数据:
使用日期作为索引,可以轻松选择特定日期范围的数据。# 按日期选择数据 df = df.set_index('date_column') selected_data = df['2022-01-01':'2022-01-10']
-
按时间间隔切片:
使用resample()
方法可以对时间序列数据进行重采样,例如按天、周、月等进行汇总。# 按周重采样 weekly_data = df.resample('W').sum()
时间序列分析:
-
计算滚动统计量:
使用rolling()
方法计算滚动平均、滚动总和等。# 计算滚动平均 rolling_mean = df['column'].rolling(window=7).mean()
-
时序差分:
使用diff()
方法计算时序差分,以处理非平稳时间序列。# 计算时序差分 differenced_data = df['column'].diff()
时间序列可视化:
-
绘制时间序列图:
使用plot()
方法绘制时间序列图。# 绘制时间序列图 df['column'].plot(figsize=(10, 6), title='Time Series Plot')
-
绘制滚动统计图:
绘制滚动统计图以可视化趋势。# 绘制滚动平均图 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())
输出结果将包括以下信息:
-
数据框的总行数和总列数: 例如,“RangeIndex: 1000 entries, 0 to 999” 表示数据框有1000行。
-
每列的名称和非空值数量: 例如,“age 1000 non-null int64” 表示 “age” 列有1000个非空值,数据类型为整数。
-
每列的数据类型: 例如,“age int64” 表示 “age” 列的数据类型是整数。
-
内存使用情况: 例如,“memory usage: 78.2 KB” 表示该数据框占用了78.2千字节的内存。
train.info()
是一个非常有用的方法,可以帮助你快速了解数据框的结构、特征和缺失值情况。这对于数据清理和预处理阶段是至关重要的。
写在最后
本文采用了 ChatGPT 辅助进行内容的书写和完善
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!