【人工智能-初级】第18章 如何用Pandas进行数据分析和处理
文章目录
- 一、引言
- 二、Pandas 基础
- 2.1 什么是 Pandas?
- 2.2 导入 Pandas 库
- 三、Pandas 数据结构
- 3.1 Series 数据结构
- 3.2 DataFrame 数据结构
- 四、Pandas 基本操作
- 4.1 读取和保存数据
- 4.2 查看数据
- 4.3 数据选择和过滤
- 4.3.1 选择列
- 4.3.2 选择行
- 4.4 数据过滤
- 五、Pandas 数据处理
- 5.1 缺失值处理
- 5.2 数据排序
- 5.3 数据分组与聚合
- 5.4 数据合并
- 六、Pandas 数据分析实战
- 6.1 数据清洗
- 6.2 数据探索
- 6.3 数据可视化
- 七、总结
一、引言
在数据分析的工作中,Pandas 是 Python 生态系统中不可或缺的利器。Pandas 提供了强大而灵活的工具,帮助数据科学家和分析师进行数据的清洗、处理、分析和可视化。它以DataFrame 作为核心数据结构,能够方便地操作和分析结构化数据。在本篇文章中,我们将深入介绍 Pandas 的基本概念和数据处理技巧,带您逐步了解如何用 Pandas 进行数据分析和处理。
二、Pandas 基础
2.1 什么是 Pandas?
Pandas 是 Python 的一个开源数据分析库,旨在使数据操作和处理更为简单。Pandas 提供了两种核心数据结构:
- Series:一维数据结构,类似于 Python 的列表或字典。
- DataFrame:二维数据结构,类似于电子表格中的表格,是 Pandas 的核心数据结构。
通过这些数据结构,Pandas 可以轻松地进行数据的清洗、合并、重塑和聚合等操作。
2.2 导入 Pandas 库
首先,我们需要导入 Pandas 库:
import pandas as pd
通常,我们将 Pandas 库重命名为 pd,这样可以更简洁地调用 Pandas 中的各种函数和方法。
三、Pandas 数据结构
3.1 Series 数据结构
Series 是 Pandas 中最基础的数据结构,它可以看作是一维的数组,具有索引(Index)和数据(Data)。
import pandas as pd# 创建一个 Series
data = [10, 20, 30, 40, 50]
series = pd.Series(data)
print(series)
输出:
0 10
1 20
2 30
3 40
4 50
dtype: int64
- 索引(Index):默认从 0 开始,可以自定义索引。
- 数据(Data):存储在 Series 中的值。
3.2 DataFrame 数据结构
DataFrame 是 Pandas 中最常用的数据结构,可以看作是二维的表格,由多行和多列组成,类似于 Excel 表格或 SQL 数据库中的表。
# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'Salary': [50000, 60000, 70000, 80000]
}df = pd.DataFrame(data)
print(df)
输出:
Name Age Salary
0 Alice 25 50000
1 Bob 30 60000
2 Charlie 35 70000
3 David 40 80000
- 列(Column):表示某一类属性(如年龄、薪资)。
- 行(Row):表示某个实体(如某个人的详细信息)。
- 索引(Index):默认从 0 开始,也可以自定义索引。
四、Pandas 基本操作
4.1 读取和保存数据
Pandas 提供了多种方式来读取和保存数据。最常见的是读取和保存 CSV 文件。
# 读取 CSV 文件
df = pd.read_csv('data.csv')# 保存 DataFrame 到 CSV 文件
df.to_csv('output.csv', index=False)
- pd.read_csv():从 CSV 文件读取数据。
- df.to_csv():将 DataFrame 保存为 CSV 文件。
4.2 查看数据
当我们导入一个 DataFrame 后,通常需要查看数据的基本信息。
# 查看前几行数据
print(df.head())# 查看数据的统计信息
print(df.describe())# 查看数据的行数和列数
print(df.shape)
- head():查看前 5 行数据,帮助了解数据的结构。
- describe():查看数据的统计信息,包括平均值、标准差、最大值和最小值等。
- shape:返回数据的行数和列数。
4.3 数据选择和过滤
Pandas 提供了多种方式来选择和过滤数据。
4.3.1 选择列
# 选择单列数据
age = df['Age']
print(age)
输出:
0 25
1 30
2 35
3 40
Name: Age, dtype: int64
- df[‘Age’]:选择名为 Age 的列。
4.3.2 选择行
使用 loc 和 iloc 可以选择特定的行。
# 使用 loc 根据标签选择行
row_1 = df.loc[1]
print(row_1)# 使用 iloc 根据位置选择行
row_2 = df.iloc[2]
print(row_2)
- loc[]:基于标签选择数据。
- iloc[]:基于位置选择数据。
4.4 数据过滤
我们可以根据条件对数据进行过滤。
# 过滤年龄大于30的员工
filtered_df = df[df['Age'] > 30]
print(filtered_df)
输出:
Name Age Salary
2 Charlie 35 70000
3 David 40 80000
- df[df[‘Age’] > 30]:返回年龄大于 30 的员工。
五、Pandas 数据处理
5.1 缺失值处理
在实际数据中,缺失值是常见的问题。Pandas 提供了简单的方法来处理缺失值。
# 查看缺失值情况
print(df.isnull().sum())# 填充缺失值
filled_df = df.fillna(0)# 删除包含缺失值的行
dropped_df = df.dropna()
- isnull():返回布尔值 DataFrame,指示哪些值是缺失的。
- fillna():用指定的值填充缺失值。
- dropna():删除包含缺失值的行。
5.2 数据排序
我们可以对 DataFrame 中的数据进行排序。
# 按年龄升序排序
sorted_df = df.sort_values(by='Age')
print(sorted_df)
- sort_values():按指定列对数据进行排序。
5.3 数据分组与聚合
Pandas 提供了灵活的数据分组和聚合方法,帮助我们从数据中获取有用的信息。
# 按 Name 分组,计算每组的平均年龄
average_age = df.groupby('Name')['Age'].mean()
print(average_age)
- groupby():根据某列对数据进行分组。
- mean():对每组数据进行平均值计算。
5.4 数据合并
Pandas 允许将多个 DataFrame 进行合并,类似于 SQL 中的连接操作。
# 创建两个 DataFrame
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df2 = pd.DataFrame({'Name': ['Charlie', 'David'], 'Salary': [70000, 80000]})# 合并两个 DataFrame
merged_df = pd.merge(df1, df2, on='Name', how='outer')
print(merged_df)
- pd.merge():根据某列将两个 DataFrame 合并。
- how=‘outer’:指定合并的方式,可以是 ‘inner’, ‘outer’, ‘left’, ‘right’。
六、Pandas 数据分析实战
为了更好地理解 Pandas 的数据分析能力,我们将使用一个示例数据集来展示如何进行数据清洗、探索和分析。假设我们有一个包含员工信息的数据集,数据包括姓名、年龄、薪资、部门等信息。
6.1 数据清洗
数据清洗是数据分析中非常重要的一步。在这一步中,我们将删除重复数据、处理缺失值以及转换数据类型。
# 删除重复数据
df = df.drop_duplicates()# 填充缺失值
df['Salary'] = df['Salary'].fillna(df['Salary'].mean())# 转换数据类型
df['Age'] = df['Age'].astype(int)
- drop_duplicates():删除重复数据。
- fillna():使用平均值填充缺失的薪资数据。
- astype():转换数据类型。
6.2 数据探索
数据探索是理解数据的重要过程,通过探索性数据分析,我们可以了解数据的分布、特征和潜在的模式。
# 查看每个部门的平均薪资
avg_salary_by_dept = df.groupby('Department')['Salary'].mean()
print(avg_salary_by_dept)# 查看薪资的分布情况
df['Salary'].hist(bins=10)
plt.xlabel('Salary')
plt.ylabel('Frequency')
plt.title('Salary Distribution')
plt.show()
- groupby():按部门对数据进行分组,并计算平均薪资。
- hist():绘制薪资的直方图,查看薪资的分布。
6.3 数据可视化
Pandas 集成了 Matplotlib,可以方便地进行数据的可视化。通过可视化,我们可以直观地观察数据的特征和模式。
# 按部门绘制员工人数的柱状图
df['Department'].value_counts().plot(kind='bar')
plt.xlabel('Department')
plt.ylabel('Number of Employees')
plt.title('Number of Employees by Department')
plt.show()
- value_counts():计算每个部门的员工人数。
- plot(kind=‘bar’):绘制柱状图,显示每个部门的员工数量。
七、总结
这篇文章介绍了如何用 Pandas 进行数据分析和处理,从基础数据结构到常见的数据操作和实战应用。如果您需要更详细的解释或有任何具体问题,欢迎提出!