具体学习 pandas 和 xlrd:从零开始
前言
在数据处理和分析中,Excel 文件是最常见的数据格式之一。Python 提供了强大的库 pandas,可以轻松地处理 Excel 文件中的数据。同时,我们还可以使用 xlrd 来读取 Excel 文件,尤其是较旧格式的 .xls 文件。
本篇博客将从零开始,带你学习怎样使用 pandas 和 xlrd 来读取、处理、修改和生存 Excel 文件的数据。我们将具体讲解每一步,并附带代码示例和输出结果。
一、情况预备和安装
在开始学习之前,我们需要确保 Python 情况中已经安装了 pandas 和 xlrd。你可以通过以下步骤安装这些库。
1.1 安装 pandas 和 xlrd
打开命令行(Windows)或终端(macOS 和 Linux),输入以下命令来安装 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)
- # 显示 DataFrame
- print(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']
- # 显示 Series
- print(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']
- # 显示更新后的 DataFrame
- print(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'])
- # 显示更新后的 DataFrame
- print(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 的 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') for file in file_list]
- combined_df = pd.concat(df_list, ignore_index=True)
- # 显示合并后的 DataFrame
- print(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.0 None
- 3 None 30.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 实际应用场景
在项目中,数据洗濯是必不可少的一步。你可以使用这些方法来处理数据集中的缺失值,确保数据完整性和同等性。
四、数据筛选与条件过滤
4.1 场景概述
有时你需要从大数据集中筛选出符合特定条件的数据,比如筛选出全部年事大于 30 岁的人。
4.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
复制代码 4.3 实际应用场景
在项目中,你可以使用这种条件筛选方法来对数据举行初步分析,大概提取出特定子集的数据用于进一步处理。
五、高效的数据操作与分析
5.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
复制代码 5.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.0 35.0
- Los Angeles NaN 30.0
- New York 25.0 28.0
复制代码 5.3 实际应用场景
在你的项目中,分组和数据透视表可以帮助你快速地对数据举行汇总和分析。比方,你可以按部门和性别统计员工的均匀年事,大概按产品和地区盘算销售额的汇总。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |