【Python】Python读写.xlsx文件(基本操作、空值补全等)

news2025/2/25 5:22:30

【Python】Python读写.xlsx文件(Pandas)

文章目录

  • 【Python】Python读写.xlsx文件(Pandas)
    • 1. 介绍
    • 2. Pandas读写xlsx文件
      • 2.1 基本操作
        • 2.1.1 实现任务
        • 2.1.2 代码
        • 2.1.3 结果
      • 2.2 进阶操作
        • 2.2.1 写操作
        • 2.2.2 查看数据表的基本信息
        • 2.2.2 空值的与缺失值(NAN、NAT)
        • 2.2.3 数据清洗
    • 3. 参考

1. 介绍

本文介绍如何使用使用 pandas 库来读取xlsx文件中的数据。

  • 需要安装openpyxl库才可以读取xlsx文件,使用pip install openpyxl。
  • 当然也可以用其他的库,比如openpyxl、xlrd,可以参考:
    • https://blog.csdn.net/moasad/article/details/120120673
    • https://blog.csdn.net/liuyingying0418/article/details/101066630

2. Pandas读写xlsx文件

2.1 基本操作

2.1.1 实现任务

  • 读取前n行数据

  • 读取指定数据(指定行指定列)

  • 获取文件行号和列标题

  • 将数据转换为字典形式

  • 原数据:
    在这里插入图片描述

2.1.2 代码

import pandas as pd
#1.读取前n行所有数据
df1=pd.read_excel('d1.xlsx')#读取xlsx中的第一个sheet
data1=df1.head(10)#读取前10行所有数据
data2=df1.values#list【】  相当于一个矩阵,以行为单位
#data2=df.values()   报错:TypeError: 'numpy.ndarray' object is not callable
print("获取到所有的值:\n{0}".format(data1))#格式化输出
print("获取到所有的值:\n{0}".format(data2))
 
#2.读取特定行特定列
data3=df1.iloc[0].values#读取第一行所有数据
data4=df1.iloc[1,1]#读取指定行列位置数据:读取(1,1)位置的数据
data5=df1.iloc[[1,2]].values#读取指定多行:读取第一行和第二行所有数据
data6=df1.iloc[:,[0]].values#读取指定列的所有行数据:读取第一列所有数据
print("数据:\n{0}".format(data3))
print("数据:\n{0}".format(data4))
print("数据:\n{0}".format(data5))
print("数据:\n{0}".format(data6))
 
#3.获取xlsx文件行号、列号
print("输出行号列表{}".format(df1.index.values))#获取所有行的编号:0、1、2、3、4
print("输出列标题{}".format(df1.columns.values))#也就是每列的第一个元素
 
#4.将xlsx数据转换为字典
data=[]
for i in df1.index.values:#获取行号的索引,并对其遍历
    #根据i来获取每一行指定的数据,并用to_dict转成字典
    row_data=df1.loc[i,['id','name','class','data','score',]].to_dict()
    data.append(row_data)
print("最终获取到的数据是:{0}".format(data))
 
#iloc和loc的区别:iloc根据行号来索引,loc根据index来索引。
#所以1,2,3应该用iloc,4应该有loc

2.1.3 结果

在这里插入图片描述
在这里插入图片描述

2.2 进阶操作

准备工作(导入包、数据)

#导入必备数据分析库
import pandas as pd
import numpy as np

#导入excel数据文件
df = pd.DataFrame(pd.read_excel("TMao.xlsx")) 
#导入csv数据文件
# df = pd.DataFrame(pd.read_csv("Attributes.csv",header=1,sep=','))  #表示第一行为字段名

2.2.1 写操作

df2.to_excel(writer, ‘Sheet’, index=False)

#  任务:输出满足成绩大于等于90的数据
writer = pd.ExcelWriter('C:/Users/enuit/Desktop/out_test.xlsx')
temp = []
for i in range(len(df.index.values)):
    if df.iloc[i, 3] >= 90:
        temp.append(df.iloc[i].values)
df2 = pd.DataFrame(data=temp, columns=df.columns.values)
#  不写index会输出索引
df2.to_excel(writer, 'Sheet', index=False)
writer.save()

2.2.2 查看数据表的基本信息

根据需要对数据进行总体上的查看,建议不要全部执行,而是一条一条依次执行查看效果。

#维度查看:返回几行几列,注意不要加()
df.shape

#查看列名称:类似于SQL中的desc
df.columns

#数据表基本信息(维度、列名称、数据格式、所占空间等)
df.info

#查看每一列数据的格式
df.dtypes
#某一列数据的格式
df['订单付款时间'].dtype
df['订单金额'].dtype

2.2.2 空值的与缺失值(NAN、NAT)

  • 空值:在pandas中的空值是"",也叫空字符串;
  • 缺失值:在dataframe中为NAN或者NAT(缺失时间),在series中为none或者nan

1)查看所有值是否为空值

  • (所有值全部列出来,不实用的操作,这里简单介绍一下用法)
#查看是否为空值
df.isnull()
#某一列的空值
df["订单付款时间"].isnull()

2)判断是否存在空值

# 查看所有值中是否存在空值
df.isnull().any()

# 判断某列是否存在空值
df["订单付款时间"].isnull().any()  #或者.values

# 打印空值行的数据
if df["订单付款时间"].isnull().any():
     print(df[df.isnull().values==True])
     print(df[df.isna().values==True])

3)唯一值查看

#查看某一列的唯一值
df["订单金额"].unique()

#查看数据表的值
df.values

#查看前几行/后几行的数据
df.head()  #默认前5行
df.tail(10)  #指定数值10,查看后10行的数据

2.2.3 数据清洗

1)空值的处理

  • (1)删除含有空值的行或列:用dropna()时可以同时剔除Nan和NaT
    • axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
    • how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
    • thresh:一行或一列中至少出现了thresh个才删除。
    • subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
    • inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。
# 准备工作
df.isnull().any()  #查看哪一列有空值,发现是<订单付款时间>列
print(df[df['订单付款时间'].isna().values==True])  #输出<订单付款时间>列存在空值的行

#清洗空值
df2 = df.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)  #删除含有空值的行或列 
df2['订单付款时间'].isna().any()  #查看是否还存在空值

#再次查看
df2.shape
  • (2)若发现dropna()后仍然存在空值,则有可能其中并不是空值,而是空字符串,这里就可以将空字符串替换成空值再进行dropna()操作
df.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
df['订单付款时间'].dropna()
  • (3)填充含有空值的行或列(ffill / bfill)
    • value:需要用什么值去填充缺失值
    • axis:确定填充维度,从行开始或是从列开始
    • method:ffill:用缺失值前面的一个值代替缺失值,如果axis=1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现
    • limit:确定填充的个数,如果limit=2,则只填充两个缺失值。
df.isna().any()  #查看原数据表是否存在空值
df3 = df.fillna(method='ffill',axis=0,inplace=False,limit=None,downcast=None)
df3.isna().any()  #查看填充后的数据表是否存在空值

#用均值填充空值(mean方法)
df['订单金额'].fillna(df[订单金额].mean())

2)格式转换

  • (1)清除空格字符strip:调用map函数对str对象进行空格去除,若去除逗号可以用map(str.strip(‘,’))
df['收货地址']=df['收货地址'].map(str.strip())  
  • (2)大小写转换lower/upper
df['编码']=df['编码'].strip().lower()  #大写同理,upper()
  • (3)更改数据格式astype
df['订单金额'].astype('int')  #int整数类型,同理float浮点型

3)更改列名即字段名

df.rename(columns={'实付金额':'实付'})  #把实付金额,改成 实付

4)保留一个重复值

df['收货地址'].drop_duplicates()  #删除列中后出现的值
df['收货地址'].drop_duplicates(keep='last')  #删除列中先出现的值,即保留最后一个值

5)数据替换
把收货地址中的 四川 改为 四川省

df['收货地址'].replace('四川', '四川省')  

3. 参考

【1】https://blog.csdn.net/RitaAndWakaka/article/details/108366203
【2】https://blog.csdn.net/Viewinfinitely/article/details/124728721

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集中一个主题,密集学习几个月,突飞猛进

集中一个主题&#xff0c;密集学习几个月大长进 诺贝尔奖获得者西蒙发现 密集学习了几个月品牌营销的知识 长进明显 原来是有科学规律的 趣讲大白话&#xff1a;大力出奇迹 【趣讲信息科技132期】 **************************** 西蒙学习法&#xff1a;“对于一个有一定基础的人…

KANO模型-产品需求调研利器

最近要做一个项目&#xff0c;需要调研客户的真实需求&#xff0c;我们有一些可提供的功能&#xff0c;需要通过问卷调研出客户对功能的优先级需求。但问卷调研的结果能反映客户的真实需求和痛点吗&#xff1f;如何给这些需求排优先级&#xff0c;以及所占的权重&#xff1f;如…

【python】只需一段代码,剪辑一个视频——Moviepy详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、准备二、视频剪辑三、视频拼接四、逐帧变化四、导出GIF总结前言 知道吗&#xff0c;用moviepy一行代码就能够快速剪辑视频中某个区间的片段&#xff1a; cl…

mac m1系统安装安卓手机模拟器

背景&#xff1a;本人是一名开发人员&#xff0c;本地小程序上的需要地图导航到手机上&#xff0c;所以找到一个mac&#xff08;m1&#xff09;安装安卓模拟器的方案&#xff0c;这里记录分享一下。 废话不多说直接上步骤&#xff0c;很详细跟着步骤走就能完成&#xff01;&am…

【MySQL】delete和truncate的用法和区别

一、delete和truncate的用法 有如下数据表t_student 关键字delete和truncate都用来清除表中数据&#xff0c;语法结构为&#xff1a; delete from t_student;truncate table t_student; 两条SQL操作后的结果一样&#xff1a;删除了表中数据&#xff0c;但是会保留表的结构&a…

OpenAI Embedding:快速实现聊天机器人(一)

theme: orange 本文正在参加「金石计划」 上文 OpenAI Embedding&#xff1a;基于人工智能的搜索新篇章 有讲到Embedding的基础概念以及OpenAI Embedding 的能力和应用场景&#xff0c;这篇文章讲讲如何手把手构建聊天机器人。 聊天机器人介绍 聊天机器人作为一项重要的企业级服…

Qt 数据库SQL

Qt 数据库SQL用户接口层SQL接口层驱动层创建连接数据库查询两个数据库示例用户接口层、SQL接口层和驱动层是数据库系统中的三个重要组成部分&#xff0c;它们分别负责不同的功能。 用户接口层 用户接口层 用户接口层是用户与数据库系统交互的界面。它提供了一些简单易用的工具…

HDSF 简介

目录 一、HDFS 的设计特点是 二、什么零拷贝 2.1 传统情况&#xff1a; 2.2 零拷贝技术&#xff1a; 三、什么是DMA 四、HDFS 的关键元素 五、HDFS 运行原理 六、HDFS 数据合并原理 七、HDFS 写的原理 八、HDFS 读的原理 九、分块存储 十、 安全模式 十一、 MapRedu…

如何使用微服务架构?使用过程需要注意什么?

一、使用微服务架构的规范 1.1 服务拆分 微服务的服务拆分是根据业务领域和业务功能来划分的&#xff0c;目的是将复杂的单体应用程序分解为小型、自治的服务&#xff0c;每个服务都专注于处理一个特定的业务领域或功能。 以下是微服务拆分的一些常见策略&#xff1a; 领域…

JavaEE——volatile、wait、notify三个关键字的解释

文章目录一、volatile和内存可见性1.解释内存可见性问题2. volatile 的使用与相关问题二、wait 和 notify1.wait 方法2.notify() 方法3. 关于 notifyAll() 方法4. wait 和 sleep 之间的简单比较一、volatile和内存可见性 前面的文章&#xff0c;我们已经提及到了内存可见性问题…

硬件设计--stm32自动下载电路设计

1 参考博客&#xff1a; 1、Stm32 一键下载电路详解 2、启动模式&#xff0c;BOOT0和BOOT1详解 3、STM32自动ISP电路设计 4、STM32 USB接口 一键下载电路详解与过程分析 2 下载软件分享&#xff1a; 参考博客&#xff1a;FlyMcu - 用于STM32芯片ISP串口程序一键下载的免费软…

【速记】Postgresql中几个ResourceOwner的含义

几个ResourceOwner的含义 总结下几个resowner的含义&#xff1a; 事务结构内的resowner&#xff1a;TransactionState→curTransactionOwner 含义&#xff1a;跟随事务结构体创建&#xff0c;会申请内存&#xff0c;跟随事务结构释放。每层事务都有自己的curTransactionOwner…

Vivado 下按键实验

Vivado下按键实验 实验原理 PL通过按键的开关状态控制led的亮灭&#xff0c;按键按下的时候灯亮&#xff0c;按键未按下的时候灯灭。 这里的描述有些问题&#xff0c;PL_LED1为高的时候&#xff0c;LED两端的电压都为高&#xff0c;灯应该是不亮的&#xff0c;所以按照下面实…

口令暴力破解--Ftp协议暴力破解与Ssh协议暴力破解

Ftp协议暴力破解 FTP服务检测 FTP服务 FTP是一种文件传输协议&#xff0c; FTP服务默认端口为21。利用FTP服务器可以在本地主机和远程主机间进行文件传输。当FTP没有配置好安全控制&#xff0c;如对登录的源地址及密码尝试次数做限制&#xff0c;那么就会存在暴力破解可能。…

uniapp - 实现车牌号键盘与格子间隔显示组件,汽车牌照录入支持自定义样式、新能源等(附带组件完整源码,开箱即用,稍微改改就能用)

效果图 uniapp 全平台兼容,车牌号键盘输入、分格显示功能示例源码,注释很多! 可以直接复制一下,然后自己改改样式或功能就能使了。 示例源码 复制,运行。 &

基于神经网络的协同过滤-NCF

目录 1、摘要 2、引言 2.1协同过滤 2.2矩阵分解 3.准备工作 3.1学习隐性数据 3.2矩阵分解 ​3.3神经协同过滤 3.4广义矩阵分解 3.5多层感知器 3.6GMF和MLP的融合-NeuMF(神经矩阵分解) 4.总结 1、摘要 尽管最近的一些工作已经把深度学习运用到了推荐中&#xff0…

【mysql性能调优 • 一】mysql企业级安装部署(保姆级别教程)

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

k8s 认证基础

0x00 前言 要想研究一个东西是不是存在安全问题&#xff0c;那么就要知道这个东西是什么&#xff0c;怎么用的&#xff0c;如何认证&#xff0c;认证方式等问题&#xff0c;了解这些才能更好的去解释学习安全问题。 0x01 访问控制 首先是k8s用户k8s用户分为service account以…

涨点技巧:Yolov5/Yolov7引入CVPR2023 Demystify Transformers Convolutions ,提升小目标检测精度

Demystify Transformers & Convolutions in Modern Image Deep Networks 论文:https://arxiv.org/pdf/2211.05781.pdf 视觉转换器最近的成功激发了一系列具有新颖特征转换范例的视觉主干,这些范例报告了稳定的性能增益。尽管新颖的特征转换设计通常被认为是收益的来源,…

0302Prim算法-最小生成树-图-数据结构和算法(Java)

文章目录1 Prim算法1.1 概述1.1.1 算法描述1.1.2 数据结构1.1.3 横切边集合维护1.2 延时实现1.2.1 实现代码1.2.2 性能分析1.3 即时实现1.3.1 分析1.3.2 实现代码1.3.3 性能分析结语1 Prim算法 1.1 概述 1.1.1 算法描述 算法描述&#xff1a; 初始化最小生成树&#xff0c;只…