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

【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.mfbz.cn/a/12303.html

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

相关文章

电脑有自带的录屏功能吗?电脑录屏如何录人脸

案例&#xff1a;所有电脑都有自带的录屏功能吗&#xff1f; “在网上了解到电脑有录屏功能&#xff0c;但是我在我的电脑上又找不到。想问问小伙伴们是所有的电脑都有自带的录屏功能吗&#xff1f;怎样才能找到电脑自带的录屏功能&#xff1f;” 在日常使用电脑时&#xff0…

Python 无监督学习实用指南:1~5

原文&#xff1a;Hands-on unsupervised learning with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关…

封装通用el-form表单(2种方式)

1、序言 项目地址&#xff1a;git clone form-demo: 封装通用el-form 一个后台管理系统最常见的是表单&#xff0c;表单最常见的是输入框、下拉选择、日期选择、单选、复选框等等&#xff0c; 系统添加若干模块&#xff0c;就复制粘贴若干个el-form、el-form-item&#xff0c;有…

重学Java设计模式-行为型模式-责任链模式

重学Java设计模式-行为型模式-责任链模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-18-重学 Java 设计模式《实战责任链模式》.html#重学-java-设计模式-实战责任链模式「模拟618电商大促期间-项目上线流程多级负责人审批场景」 责任链模…

Shell 脚本编程

1. shell 概述 &#x1f95e; shell 是一个命令行解释器&#xff0c;它能接受应用程序、用户 的命令&#xff0c;然后调用操作系统内核。 ⭐ 还是一门 功能强大的编程语言&#xff0c;易编写、易调试、灵活性强。 2. shell入门 &#xff08;1&#xff09;脚本格式 &#x1f…

js中 = 等号赋值的问题,Js中对象的引用问题,深浅拷贝

js "" 赋值符号 在js中 “”对于基本数据类型是赋值符号&#xff0c;比较&#xff08; 或 &#xff09;的时候是值&#xff1b;对于引用数据类型-对象来说 是地址引用&#xff0c;比较的时候是比较的地址。 基本数据类型和引用数据类型的比较 let a 3; let b a;…

离散数学_九章:关系(1)

关系 9.1关系及其性质 1、二元关系 2、集合A上的关系 3、n元素集合 有多少个关系&#xff1f; 4、关系的性质 1. 自反 2. 对称 3. 反对称 4. 传递 5、关系的组合 关系的合成 关系的幂 9.1关系及其性质 1、二元关系 设A和B是集合&#xff0c;一个从 A 到 B 的二元关…

stm32当中GPIO输出知识点汇总(GPIO的八种模式及其原理)

一、GPIO工作模式. 1. 四种输入模式 GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式 2. 四种输出模式 GPIO_Mode_Out_OD 开漏输出模式 GPIO_Mode_Out_PP 推挽输出模式 GPIO_Mod…

CentOS7-部署Tomcat并运行Jpress

1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。1、简述静态网页和动态网页的区别 静态网页&#xff1a; 请求响应信息&#xff0c;发给客户端进行处理&#xff0c;由浏览器进…

目标检测基础之IOU计算

目标检测基础之IOU计算 概念理解——什么是IOUdemo后记 概念理解——什么是IOU IOU 交并比&#xff08;Intersection over Union&#xff09;&#xff0c;从字面上很容易理解&#xff1a;计算交集在并集的比重。从网上截张图看看 I O U A ∩ B A ∪ B IOU \frac{A \cap B}…

基于BenchmarkSQL的Oracle数据库tpcc性能测试

基于BenchmarkSQL的Oracle数据库tpcc性能测试 安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQL BenchmarkSQL props文件配置数据库用户配置BenchmarkSQL压测装载测试数据TPC-C压测&#xff08;固定事务数量&#xff09;TPC-C压测&#xff08;固定时长&#xff09;生成测…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本&#xff08;如果有&#xff0c;可选&#xff0c;非必须&#xff09;3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

[Linux系统]系统安全及应用一

系统安全及应用 一、账号安全基本措施1.1系统账号清理1.1.1将非登录用户的shell设为/sbin/nologin1.1.2锁定长期不使用的账号1.1.3删除无用的账号1.1.4锁定账号文件文件chattr1.1.5查看文件校验和md5sum 1.2密码安全控制1.2.1设置密码有效期 1.3历史命令限制1.3.1 减少记录命令…

C语言笔记 | 一元三次方程

文章目录 0x00 前言 0x01 问题分析 0x02 代码设计 0x03 完整代码 0x04 运行效果 0x05 参考文献 0x06 总结 0x00 前言 在 1545 年&#xff0c;意大利学者卡丹所写的《关于代数的大法》中&#xff0c;提出了一元三次方程的求根公式。人们将其称为卡丹公式。对于标准型的一…

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间&#xff0c;表示对学校开展创科工作的鼓励及希望。考察期间&#xff0c;夏宝龙主任参观了香港科大的空气动力学和声学实验中心&#xff0c;以及香港科大先进显示与光电子技术国…

4个 Python 库来美化你的 Matplotlib 图表

Matplotlib是一个被广泛使用的Python数据可视化库&#xff0c;相信很多人都使用过。 但是有时候总会觉得&#xff0c;Matplotlib做出来的图表不是很好看、不美观。 今天我就给大家分享四个美化Matplotlib图表的Python库&#xff0c;它们可以轻松让你的Matplotlib图表变得好看…

( “树” 之 DFS) 404. 左叶子之和 ——【Leetcode每日一题】

404. 左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24 示例 2: 输入: root [1]…

OpenGL入门教程之 深入理解

一、OpenGL简介 OpenGL是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程规范。OpenGL包含一系列可以操作图形和图像的函数&#xff0c;但OpenGL没有实现这些函数&#xff0c;OpenGL仅规定每个函数应该如何执行以及其输出值(类似接口)&#xff0c;所以OpenGL仅是一…

基于JSP的网上购物系统的设计与实现(论文+源码)_kaic

摘 要 近些年来&#xff0c;社会的生产力和科技水平在不断提高&#xff0c;互联网技术也在不断更新升级&#xff0c;网络在人们的日常生活中扮演着一个重要角色&#xff0c;它极大地方便了人们的生活。为了让人们实现不用出门就能逛街购物&#xff0c;网络购物逐渐兴起慢慢变得…

新一代AI带来更大想象空间!上海将打造元宇宙超级场景!

引子 上海市经信委主任吴金城4月12日在“2023上海民生访谈”节目表示&#xff0c;上海将着力建设元宇宙智慧医院、前滩东体元宇宙、张江数字孪生未来之城等元宇宙超级场景。 吴金城说&#xff0c;新一代人工智能将带来更大的想象空间。比如&#xff0c;人工智能和元宇宙数字人的…
最新文章