文章目录
详细学习
pandas
和
xlrd
:从零开始
前言
在数据处理和分析中,Excel 文件是最常见的数据格式之一。Python 提供了强大的库
pandas
,可以轻松地处理 Excel 文件中的数据。同时,我们还可以使用
xlrd
来读取 Excel 文件,尤其是较旧格式的
.xls
文件。
本篇博客将从零开始,带你学习如何使用
pandas
和
xlrd
来读取、处理、修改和保存 Excel 文件的数据。我们将详细讲解每一步,并附带代码示例和输出结果。
一、环境准备和安装
在开始学习之前,我们需要确保 Python 环境中已经安装了
pandas
和
xlrd
。你可以通过以下步骤安装这些库。
1.1 安装
pandas
和
xlrd
打开命令行(Windows)或终端(macOS 和 Linux),输入以下命令来安装
pandas
和
xlrd
:
pip install pandas xlrd
1.2 验证安装
安装完成后,你可以通过以下代码验证安装是否成功:
import pandas as pd
import xlrd
print(pd.__version__)# 打印 pandas 的版本print(xlrd.__version__)# 打印 xlrd 的版本
如果没有报错,并且成功打印出版本号,说明安装成功。
二、
pandas
和
xlrd
的基础概念
在开始写代码之前,我们先了解一些
pandas
和
xlrd
的基础概念。
2.1 什么是
pandas
?
**
pandas
** 是一个用于数据分析和处理的强大 Python 库。它的核心数据结构是 DataFrame 和 Series。
- DataFrame:一个二维表格,类似于电子表格或数据库中的表,具有行和列。
- Series:一个一维数组,类似于表格中的一列数据。
2.2 什么是
xlrd
?
**
xlrd
** 是一个专门用于读取 Excel 文件的库,尤其是
.xls
格式的文件。
pandas
依赖
xlrd
来读取这些文件的数据。
三、使用
pandas
读取 Excel 文件
3.1 读取 Excel 文件的基础方法
我们首先学习如何使用
pandas
读取一个 Excel 文件。假设我们有一个名为
example.xls
的 Excel 文件,它包含以下数据:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
代码示例:读取 Excel 文件
import pandas as pd
# 使用 pandas 读取 Excel 文件
df = pd.read_excel('example.xls', engine='xlrd')# 显示前几行数据print(df.head())
解释
- **
pd.read_excel
**:这是pandas
提供的读取 Excel 文件的函数。我们传入文件名example.xls
和engine='xlrd'
参数,xlrd
用于解析较旧格式的.xls
文件。 - **
df.head()
**:head()
方法用于显示 DataFrame 的前 5 行数据,帮助我们快速查看数据内容。
输出示例
当你运行这段代码时,你会看到以下输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
四、深入理解
DataFrame
和
Series
4.1 什么是
DataFrame
?
DataFrame 是
pandas
中的核心数据结构之一,它是一个二维的表格,类似于 Excel 表格。每个 DataFrame 都有行索引和列标签。
示例:创建一个简单的
DataFrame
import pandas as pd
# 定义一个字典,表示表格中的数据
data ={'Name':['Alice','Bob','Charlie'],'Age':[25,30,35],'City':['New York','Los Angeles','Chicago']}# 将字典转换为 DataFrame
df = pd.DataFrame(data)# 显示 DataFrameprint(df)
解释
- **字典
data
**:我们创建了一个字典,其中每个键(如'Name'
)代表一列数据,每个键对应的值是一个列表,表示这一列的所有数据。 - **
pd.DataFrame(data)
**:pandas
提供的DataFrame
构造函数,用于将字典转换为 DataFrame。
输出示例
运行代码后,你将看到如下输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
4.2 什么是
Series
?
Series 是
pandas
中的一维数据结构,类似于 Excel 中的一列。每个 Series 都有一个索引和一组数据。
示例:从 DataFrame 中提取
Series
# 从 DataFrame 中提取 'Name' 列,作为一个 Series
names = df['Name']# 显示 Seriesprint(names)
输出示例
运行代码后,你将看到如下输出:
0 Alice
1 Bob
2 Charlie
Name: Name, dtype:object
解释
- **
df['Name']
**:我们使用列标签'Name'
来提取DataFrame
中的某一列,返回一个Series
。 - **
Name: Name, dtype: object
**:输出结果中显示了Series
的名称和数据类型(这里是字符串object
)。
五、处理
DataFrame
数据
5.1 增加新列
我们可以向
DataFrame
中添加一列新数据,比如性别。
代码示例:增加一列数据
# 增加一列数据,表示这些人的性别
df['Gender']=['Female','Male','Male']# 显示更新后的 DataFrameprint(df)
输出示例
运行代码后,你将看到如下输出:
Name Age City Gender
0 Alice 25 New York Female
1 Bob 30 Los Angeles Male
2 Charlie 35 Chicago Male
5.2 删除列
如果你想删除
DataFrame
中的一列数据,可以使用
drop
方法。
代码示例:删除一列数据
# 删除 'City' 列
df = df.drop(columns=['City'])# 显示更新后的 DataFrameprint(df)
输出示例
运行代码后,你将看到如下输出:
Name Age Gender
0 Alice 25 Female
1 Bob 30 Male
2 Charlie 35 Male
六、保存数据到 Excel 文件
处理完数据后,你可能需要将结果保存到一个新的 Excel 文件中。
代码示例:写入 Excel 文件
# 将 DataFrame 保存到新的 Excel 文件中
df.to_excel('output.xlsx', index=False)print("数据已保存到 output.xlsx")
解释
- **
df.to_excel
**:pandas
提供的to_excel
方法用于将 DataFrame 保存到一个 Excel 文件中。 - **
index=False
**:这个参数表示不要将行索引保存到文件中。
输出示例
运行代码后,终端中会显示:
数据已保存到 output.xlsx
并且,你的项目目录中会生成一个名为
output.xlsx
的 Excel 文件,内容如下:
Name Age Gender
0 Alice 25 Female
1 Bob 30 Male
2 Charlie 35 Male
七、读取和合并多个 Excel 文件
7.1 场景概述
在实际项目中,你可能需要从多个 Excel 文件中读取数据,并将它们合并到一个 DataFrame 中。这在处理多个来源的数据时尤其有用。
7.2 代码示例:读取并合并多个 Excel 文件
假设你有多个 Excel 文件,它们有相同的结构,现在我们需要将这些文件合并到一个 DataFrame 中。
import pandas as pd
import glob
# 获取所有 .xls 文件路径
file_list = glob.glob('data/*.xls')# 读取所有文件并合并为一个 DataFrame
df_list =[pd.read_excel(file, engine='xlrd')forfilein file_list]
combined_df = pd.concat(df_list, ignore_index=True)# 显示合并后的 DataFrameprint(combined_df.head())
详细解释
- *glob.glob(‘data/.xls’)**:使用
glob
模块查找data
目录下的所有.xls
文件,返回一个文件路径的列表。 - **pd.read_excel(file, engine=‘xlrd’)**:使用
pandas
的read_excel
函数读取每个 Excel 文件,这里指定xlrd
引擎来处理.xls
文件。 - **pd.concat(df_list, ignore_index=True)**:将所有读取的 DataFrame 合并为一个大的 DataFrame,
ignore_index=True
表示忽略原来的行索引,重新生成连续的索引。
输出示例
假设你有三个 Excel 文件,每个文件的内容类似于:
File 1:
Name Age City
0 Alice 25 New York
File 2:
Name Age City
0 Bob 30 Los Angeles
File 3:
Name Age City
0 Charlie 35 Chicago
合并后的 DataFrame 输出如下:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
7.3 实际应用场景
在项目中,你可以使用这个方法来合并多个 Excel 文件的数据,例如汇总多个部门的数据,或者处理分月份、分季度的财务报表。
八、数据清洗与缺失值处理
8.1 场景概述
在数据分析中,数据通常不完美,可能包含缺失值或异常值。你需要掌握如何清洗这些数据,以确保数据质量。
8.2 处理缺失数据
缺失值 是指在数据集中某些字段没有数据,这是常见的问题。我们可以选择删除包含缺失值的行,或者用其他值来填补缺失值。
代码示例:填充和删除缺失值
# 示例数据,假设从 Excel 读取的 DataFrame
data ={'Name':['Alice','Bob','Charlie',None],'Age':[25,None,35,30],'City':['New York','Los Angeles',None,'Chicago']}
df = pd.DataFrame(data)# 查看原始数据print("原始数据:\n", df)# 填充缺失值
df_filled = df.fillna({'Name':'未知','Age': df['Age'].mean(),'City':'未知'})print("\n填充缺失值后的数据:\n", df_filled)# 删除包含缺失值的行
df_dropped = df.dropna()print("\n删除缺失值后的数据:\n", df_dropped)
详细解释
- 填充缺失值: - **df.fillna({‘Name’: ‘未知’, ‘Age’: df[‘Age’].mean(), ‘City’: ‘未知’})**:使用字典为不同列指定填充值。
Name
列的缺失值用'未知'
填充,Age
列的缺失值用平均值填充,City
列的缺失值用'未知'
填充。 - 删除包含缺失值的行: - **df.dropna()**:删除包含任何缺失值的行,返回一个新的 DataFrame。
输出示例
原始数据:
Name Age City
0 Alice 25.0 New York
1 Bob NaN Los Angeles
2 Charlie 35.0None3None30.0 Chicago
填充缺失值后的数据:
Name Age City
0 Alice 25.0 New York
1 Bob 30.0 Los Angeles
2 Charlie 35.0 未知
3 未知 30.0 Chicago
删除缺失值后的数据:
Name Age City
0 Alice 25.0 New York
9.3 实际应用场景
在项目中,数据清洗是必不可少的一步。你可以使用这些方法来处理数据集中的缺失值,确保数据完整性和一致性。
十、数据筛选与条件过滤
10.1 场景概述
有时你需要从大数据集中筛选出符合特定条件的数据,比如筛选出所有年龄大于 30 岁的人。
10.2 代码示例:筛选数据
# 示例数据
data ={'Name':['Alice','Bob','Charlie','David'],'Age':[25,30,35,28],'City':['New York','Los Angeles','Chicago','San Francisco']}
df = pd.DataFrame(data)# 筛选年龄大于 30 岁的数据
filtered_df = df[df['Age']>30]print("年龄大于 30 岁的数据:\n", filtered_df)
详细解释
- **df[df[‘Age’] > 30]**:这是
pandas
中常见的条件筛选方法。它会返回一个新的 DataFrame,其中只包含满足条件(Age > 30
)的行。
输出示例
Name Age City
2 Charlie 35 Chicago
10.3 实际应用场景
在项目中,你可以使用这种条件筛选方法来对数据进行初步分析,或者提取出特定子集的数据用于进一步处理。
十一、高效的数据操作与分析
11.1 数据分组与聚合
数据分组和聚合是数据分析中非常常见的操作,它可以帮助你从大数据集中提取总结性信息。
代码示例:按城市分组并计算平均年龄
# 示例数据
data ={'Name':['Alice','Bob','Charlie','David','Eva'],'Age':[25,30,35,28,40],'City':['New York','Los Angeles','Chicago','New York','Chicago']}
df = pd.DataFrame(data)# 按城市分组并计算平均年龄
grouped_df = df.groupby('City')['Age'].mean()print("按城市分组后的平均年龄:\n", grouped_df)
详细解释
- **df.groupby(‘City’)[‘Age’].mean()**:按
City
列分组,然后计算每个组中Age
列的平均值。groupby
是pandas
中的一个强大函数,常用于分组统计。
输出示例
City
Chicago 37.5
Los Angeles 30.0
New York 26.5
Name: Age, dtype: float64
11.2 数据透视表(Pivot Table)
数据透视表是一种将数据重新排列为易于分析的格式的工具,在数据汇总和分析中非常有用。
代码示例:创建数据透视表
# 示例数据
data ={'Name':['Alice','Bob','Charlie','David','Eva'],'Age':[25,30,35,28,40],'City':['New York','Los Angeles','Chicago','New York','Chicago'],'Gender':['Female','Male','Male','Male','Female']}
df = pd.DataFrame(data)# 创建数据透视表,按城市和性别汇总平均年龄
pivot_table = pd.pivot_table(df, values='Age', index='City', columns='Gender', aggfunc='mean')print("数据透视表:\n", pivot_table)
详细解释
- **pd.pivot_table(df, values=‘Age’, index=‘City’, columns=‘Gender’, aggfunc=‘mean’)**:创建一个数据透视表,按城市和性别分组,计算每组的平均年龄。
输出示例
Gender Female Male
City
Chicago 40.035.0
Los Angeles NaN 30.0
New York 25.028.0
11.3 实际应用场景
在项目中,分组和数据透视表可以帮助你快速地对数据进行汇总和分析。例如,你可以按部门和性别统计员工的平均年龄,或者按产品和地区计算销售额的汇总。
以上就是关于【Python篇】详细学习 pandas 和 xlrd:从零开始的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️
版权归原作者 Trouvaille ~ 所有, 如有侵权,请联系我们删除。