详细学习 pandas 和 xlrd:从零开始

详细学习 pandasxlrd:从零开始

前言

在数据处理和分析中,Excel 文件是最常见的数据格式之一。Python 提供了强大的库 pandas,可以轻松地处理 Excel 文件中的数据。同时,我们还可以使用 xlrd 来读取 Excel 文件,尤其是较旧格式的 .xls 文件。

本篇博客将从零开始,带你学习如何使用 pandasxlrd 来读取、处理、修改和保存 Excel 文件的数据。我们将详细讲解每一步,并附带代码示例和输出结果。


一、环境准备和安装

在开始学习之前,我们需要确保 Python 环境中已经安装了 pandasxlrd。你可以通过以下步骤安装这些库。

1.1 安装 pandasxlrd

打开命令行(Windows)或终端(macOS 和 Linux),输入以下命令来安装 pandasxlrd

pip install pandas xlrd

1.2 验证安装

安装完成后,你可以通过以下代码验证安装是否成功:

import pandas as pd
import xlrd

print(pd.__version__)  # 打印 pandas 的版本
print(xlrd.__version__)  # 打印 xlrd 的版本

如果没有报错,并且成功打印出版本号,说明安装成功。


二、pandasxlrd 的基础概念

在开始写代码之前,我们先了解一些 pandasxlrd 的基础概念。

2.1 什么是 pandas

pandas 是一个用于数据分析和处理的强大 Python 库。它的核心数据结构是 DataFrameSeries

  • 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.xlsengine='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

四、深入理解 DataFrameSeries

4.1 什么是 DataFrame

DataFramepandas 中的核心数据结构之一,它是一个二维的表格,类似于 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

Seriespandas 中的一维数据结构,类似于 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_excelpandas 提供的 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') for file in file_list]
combined_df = pd.concat(df_list, ignore_index=True)

# 显示合并后的 DataFrame
print(combined_df.head())

详细解释

  1. glob.glob(‘data/*.xls’):使用 glob 模块查找 data 目录下的所有 .xls 文件,返回一个文件路径的列表。
  2. pd.read_excel(file, engine=‘xlrd’):使用 pandasread_excel 函数读取每个 Excel 文件,这里指定 xlrd 引擎来处理 .xls 文件。
  3. 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)

详细解释

  1. 填充缺失值:
    • df.fillna({‘Name’: ‘未知’, ‘Age’: df[‘Age’].mean(), ‘City’: ‘未知’}):使用字典为不同列指定填充值。Name 列的缺失值用 '未知' 填充,Age 列的缺失值用平均值填充,City 列的缺失值用 '未知' 填充。
  2. 删除包含缺失值的行:
    • 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 列的平均值。groupbypandas 中的一个强大函数,常用于分组统计。

输出示例

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 实际应用场景

在你的项目中,分组和数据透视表可以帮助你快速地对数据进行汇总和分析。例如,你可以按部门和性别统计员工的平均年龄,或者按产品和地区计算销售额的汇总。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3、.Net UI库:CSharpSkin - 开源项目研究文章

CSharpSkin(C# 皮肤)是一个基于C#语言开发的UI框架,它允许开发者使用C#和.NET技术栈来创建跨平台的桌面应用程序。CSharpSkin框架通常用于实现具有自定义外观和感觉的应用程序界面,它提供了一套丰富的控件和组件,以及灵活的样式和布局系统。 …

JUC包中常用类解析

目录 (一)Callable接口 (1)Callable与Runnable的区别 (2)Future接口 2.1Futrue接口中的方法 2.2FutureTask类 (3)Callable接口的使用 3.1借助FutureTask运行 3.2借助线程池运…

交友问题 | 动态规划

描述 如果有n个人&#xff0c;每个人都可以保持单身或与其他人结成一对。每个人只能找一个对象。求总共有多少种保持单身或结对的方式。用动态规划求解。 输入 输入第一行t表示测试用例的数量 对于每一个测试用例, 输入一个整数n表示人数1<n<18 输出 针对每个测试用…

【WPF】Prism库学习(一)

Prism介绍 1. Prism框架概述&#xff1a; Prism是一个用于构建松耦合、可维护和可测试的XAML应用程序的框架。它支持WPF、.NET MAUI、Uno Platform和Xamarin Forms等多个平台。对于每个平台&#xff0c;Prism都有单独的发布版本&#xff0c;并且它们在不同的时间线上独立开发。…

基于Java Springboot在线音乐试听交流网站

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff…

# 第20章 Cortex-M4-触摸屏

第20章 Cortex-M4-触摸屏 20.1 触摸屏概述 20.1.1 常见的触摸屏分类 电阻式触摸屏、电容式触摸屏、红外式触摸屏、表面声波触摸屏 市场上用的最多的是电阻式触摸屏与电容式触摸屏。红外管式触摸屏多用于投影仪配套设备。 电阻式触摸屏构成&#xff1a;整个屏由均匀电阻构成…

《 C++ 修炼全景指南:二十 》不止是链表升级!跳表的核心原理与超强性能解析

摘要 这篇博客全面解析了跳表 (Skip List) 作为一种高效的链表数据结构的特性和应用。跳表以多层链表和随机化策略实现 O(log n) 的查找、插入和删除性能&#xff0c;简化了平衡树结构中常见的复杂旋转操作。通过剖析跳表的结构设计和核心操作&#xff0c;我们探讨了其在范围查…

【C++之STL】摸清 string 的模拟实现(上)

文章目录 1. 为什么要模拟实现&#xff1f;2. 基本框架搭建3. 构造函数3. 1 默认构造/from c_str3. 2 拷贝构造3. 2. 1 深浅拷贝 3. 3 fill3. 4 迭代器区间构造 4. 容量操作4. 1 size()和capacity()和empty()4. 2 clear()4. 3 resize()4. 4 reserve() 1. 为什么要模拟实现&…

【postman】怎么通过curl看请求报什么错

获取现成的curl方式&#xff1a; 1&#xff0c;拿别人给的curl 2&#xff0c;手机app界面通过charles抓包&#xff0c;点击接口复制curl 3&#xff0c;浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman&#xff0c;点击import&#xff0c;粘贴curl点击send&am…

【网页设计】CSS 高级技巧

目标 能够使用精灵图能够使用字体图标能够写出 CSS 三角能够写出常见的 CSS 用户界面样式能够说出常见的布局技巧 1. 精灵图 为什么需要精灵图&#xff1f;精灵图的使用精灵图课堂案例 1.1 为什么需要精灵图&#xff1f; 一个网页中往往会应用很多小的背景图像作为修饰&…

【JavaEE初阶 — 多线程】wait() notify()

1. 协调多个线程之间的执行先后顺序的方法介绍 由于线程之间是抢占式执行的&#xff0c;因此线程之间执行的先后顺序难以预知&#xff1b;但是实际开发中&#xff0c;有时候我们希望合理地协调多个线程之间的执行先后顺序。 拓展&#xff1a; wait() 和 sleep() 的区别 …

TypeORM在Node.js中的高级应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 引言 TypeORM 基本概念 1. 实体&am…

[Mysql] Mysql的多表查询----多表关系(下)

4、操作 方式二&#xff1a;创建表之后设置外键约束 外键约束也可以在修改表时添加&#xff0c;但是添加外键约束的前提是&#xff1a;从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。 语法&#xff1a; alter table <从表名> add constr…

Ethernet 系列(9)-- 基础学习::ICMP

目录 1. 缩写词&#xff1a; 2. ICMP的目的&#xff1a; 2.1 什么是ICMP&#xff1a; 2.2 什么时候使用ICMP&#xff1a; 3. ICMP 头部&#xff1a; 4. ICMP 报文类型&#xff1a; 4.1 目标不可达&#xff1a; 4.2 重定向&#xff1a; 4.3 超时&#xff1a; 4.4 Ping…

【计算机视觉】FusionGAN

1. FusionGAN论文阅读 abreheret/FusionGAN: Pytorch implementation of "Generating a Fusion Image: One’s Identity and Another’s Shape" 1.1. WHY 在现实世界中,将对象或人物转换为期望的形状是一种常用技术,但现有的图像翻译方法在处理身份和形状时存在…

<项目代码>YOLOv8 瞳孔识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

24/11/12 算法笔记<强化学习> 自注意力机制

自注意力机制&#xff08;Self-Attention Mechanism&#xff09;&#xff0c;也称为内部注意力机制&#xff0c;是一种在深度学习模型中&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;和计算机视觉领域中广泛使用的机制。它允许模型在处理序列数据时&#xff0c…

前后端交互之动态列

一. 情景 在做项目时&#xff0c;有时候后会遇到后端使用了聚合函数&#xff0c;导致生成的对象的属性数量或数量不固定&#xff0c;因此无法建立一个与之对应的对象来向前端传递数据&#xff0c;这时可以采用NameDataListVO向前端传递数据。 Data Builder AllArgsConstructo…

k8s服务内容滚动升级以及常用命令介绍

查看K8S集群所有的节点信息 kubectl get nodes 删除K8S集群中某个特定节点 kubectl delete nodes/10.0.0.123 获取K8S集群命名空间 kubectl get namespace 获取K8S所有命名空间的那些部署 kubectl get deployment --all-namespaces 创建命名空间 web界面上看到的效果,但是…

【视觉SLAM】1-概述

读书笔记 文章目录 1. 经典视觉SLAM框架2. 数学表述2.1 运动方程2.2 观测方程2.3 问题抽象 1. 经典视觉SLAM框架 传感器信息读取&#xff1a;相机图像、IMU等多源数据&#xff1b;前端视觉里程计&#xff08;Visual Odometry&#xff0c;VO&#xff09;&#xff1a;估计相机的相…