Python之Pandas的常用技能【写入数据】

news2024/10/7 19:29:24

1、背景:

最近在工作中遇到越来越多的的使用pandas或者python来处里写入操作,尤其是对excel文件或者csv文件的操作更是常见,这里将写入操作总结如下,方便记忆,也分享给大家,希望对阅读者能够有所帮助

2、pandas写入数据的各种场景使用详解

2.1、df.to_excel()参数详解

df.to_excel(
excel_writer, #存放excel文件的地址。如果是只写文件名,不写具体的地址也可。会和py文件存放到一起。
sheet_name='Sheet1', #sheet的名字。一般默认为sheet1
na_rep='', #缺失值表示方式,一般默认为''。
float_format=None, #格式化浮点数的字符串。
columns=None, #要写入excel中的列。list。一般默认None,即全部写入。
header=True, #header即列名是否为columns,一般默认为True。
index=True, #index是否写入excel,一般默认为True。
index_label=None, #要写入excel中的index列。
startrow=0, #从哪一行开始写入数据。默认为0,即第一行。
startcol=0, #从哪一列开始写入数据。默认为0,即第一列。
engine=None, #可选参数, 用于写入要使用的引擎, openpyxl或xlsxwriter
merge_cells=True, #返回布尔值, 其默认值为True。它将MultiIndex和Hierarchical行写为合并的单元格。
encoding=_NoDefault.no_default, #默认为'utf-8'
inf_rep='inf', #可选参数, 默认值为inf。它通常表示无穷大。
verbose=_NoDefault.no_default, #它的默认值为True。返回布尔值。它用于在错误日志中显示更多信息。
freeze_panes=None, #整数的元组(长度2),默认为None。可选参数, 用于指定要冻结的最底部一行和最右边一列。
storage_options=None#
)

2.2 写入一个sheet表中

【注:要写入的excel和sheet已存在,则会覆盖】

import pandas as pd
#创建一个数据
df = pd.DataFrame({
    'name':['Lily','Jack','Rose','Joe'],
    'age':[23,23,33,45],
    'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#将index重新命名为id
df.index.name='id'
# print(df)
#写入excel
df.to_excel(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',index=True,columns=['name','age'],header=True,startrow=20)

3 同一个excel中写入多个sheet,sheet名不同

3.1 利用pd.ExcelWriter()写入多个sheet中

pd.ExcelWriter(
path, #写入的excel的存放路径
engine=None, #一般默认为io.excel.<extension>.writer,用于编写的引擎。(目前这个参数不大懂。)
date_format=None, #设置写入excel的日期格式。如"YYYY-MM-DD"
datetime_format=None, #设置写入excel的日期时间格式。如"YYYY-MM-DD HH:MM:SS"
mode='w', #{"w","a"},一般默认为"w"。使用文件的模式,是追加还是写入。
**engine_kwargs
)

3.2 利用pd.ExcelWriter()写入多个sheet中

import pandas as pd
from pandas import ExcelWriter
#创建一个数据

df = pd.DataFrame({
    'name':['Lily','Jack','Rose','Joe'],
    'age':[23,23,33,45],
    'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#将index重新命名为id
df.index.name='id'
# print(df)

#设置存入路径
with ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',mode='w') as writer:
    for i in ['sheet_1','sheet_2','sheet_3']:
        df.to_excel(writer,sheet_name=i)
    writer.save()

3.3 在原来的sheet中追加几个sheet表。(即不能覆盖原来的数据)

import pandas as pd
from pandas import ExcelWriter
#创建一个数据

df = pd.DataFrame({
    'name':['Lily','Jack','Rose','Joe'],
    'age':[23,23,33,45],
    'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#将index重新命名为id
df.index.name='id'
# print(df)

#设置存入路径,设置引擎,这是使用文件的模式。
with ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',engine='openpyxl',mode='a') as writer:
    for i in ['sheet_4','sheet_5','sheet_6']:
        df.to_excel(writer,sheet_name=i)
    writer.save()

4 在同一个excel,同一个sheet表中追加数据

【注:这里有两种思路

1)先读取原表,将现有数据与原表数据拼接后再写入;

2)直接追加】

4.1 先读取原表,将现有数据与原表数据拼接后再写入;

【注:将df_new写入excel,这个是只针对一个sheet的表格,如果是多个sheet,是消失的。因为,这其实相当于删除原来的,新建了一个表。】

import pandas as pd
#读取Excel中的数据
df_0 = pd.read_excel(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',sheet_name='sheet_1')
#修改一下索引,将id改成索引。
df_0 = df_0.set_index(keys=['id'])
print(df_0)
#创建一个数据
df = pd.DataFrame({
    'name':['Lily','Jack','Rose','Joe'],
    'age':[23,23,33,45],
    'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#将index重新命名为id
df.index.name='id'
print(df)

df_new = pd.concat([df,df_0],axis=0)
print(df_new)
#将df_new写入excel,这个是只针对一个sheet的表格,如果是多个sheet,是消失的。因为,这其实相当于删除原来的,新建了一个表。
df_new.to_excel(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',sheet_name='sheet_1',index=True)

4.2 Python对excel追加数据

利用pd.ExcelWriter(),其实是重新写入。

import pandas as pd
from pandas import ExcelWriter
from openpyxl import load_workbook
#读取Excel中的数据
df_0 = pd.read_excel(r'C:\Users\XXXXXX\Desktop\pandaswriterexcel.xlsx',sheet_name='Sheet1')
#修改一下索引,将id改成索引。
df_0 = df_0.set_index(keys=['id'])
print(df_0)
old_rows = df_0.shape[0]
df = pd.DataFrame({
    'name':['Lucy','Tofy','Anna','liting'],
    'age':[10,12,12,9],
    'job':['student','doctor','worker','lawyer']
},index=range(old_rows+1,old_rows+5),
)
#将index重新命名为id
df.index.name='id'
print(df)
writer = ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas写入excel.xlsx',mode='w')
#现将df_0存入
df_0.to_excel(writer,startrow=0,index=False,sheet_name='Sheet1')
#将df写入,注意开始行。
df.to_excel(writer,startrow=old_rows+1,header=None,index=False,sheet_name='Sheet1')
writer.save()

5 写入多个excel中

import pandas as pd
#读取Excel中的数据

df = pd.DataFrame({
    'name':['Lucy','Tofy','Anna','liting'],
    'age':[10,12,12,9],
    'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#将index重新命名为id
df.index.name='id'
#利用for循环存入多个excel
for i in range(1,3):
    df.to_excel(fr'C:\Users\XXXXXX\Desktop\p_e_{i}.xlsx',index=True,engine='openpyxl')

6 两种数据类型转成DataFrame写入excel的案例

6.1 JSON解析后存入Excel

import pandas as pd
#读取JSON数据。
f_path = r'C:\Users\XXXXXX\Desktop\测试数据.json'
data = pd.read_json(f_path,encoding='utf-8')
# print(data)
#获取list,result的值。
data_list = data.loc['list','result']
# print(data_list)
df_list = []
for one_info in data_list:
    df = pd.DataFrame(one_info,index=[0])
    df_list.append(df)
data_excel = pd.concat(df_list)
data_excel.to_excel(r'C:\Users\XXXXXX\Desktop\json_2_excel.xlsx',index=False)

6.2 列表解析后存入Excel

import pandas as pd
#先构造一个列表数据
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_excel(r'C:\Users\XXXXXX\Desktop\list_2_excel.xlsx',index=False)

3、pandas写入csv、txt

3.1 df.to_csv()参数详解

df.to_csv(
path_or_buf=None, #文件存储路径
sep=',', #分隔符
na_rep='', #缺失值填充,默认为''
float_format=None, #浮点小数的格式。
columns=None, #list。要写入的字段。一般默认为None,即全部写入。
header=True, #列名。默认为True,即写入的列名为,df的列标签。
index=True, #行索引。默认为True,即写入的行索引为,df的行标签。
index_label=None, #索引列的标签名。
mode='w', #写入模式{"w","a","r","w+","a+","r+"},一般默认为"w",写入。
encoding=None, #编码。
compression='infer', #
quoting=None, 
quotechar='"', 
lineterminator=None, 
chunksize=None, #一次写入的行数。
date_format=None, #日期格式。
doublequote=True, 
escapechar=None, 
decimal='.', 
errors='strict', 
storage_options=None
)

3.2 df.to_csv():写入数据

import pandas as pd
#先构造一个列表数据
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_csv(r'C:\Users\XXXXXX\Desktop\list_2_excel.csv',index=False,sep=',')

3.3 df.to_csv():追加数据

import pandas as pd
#先构造一个列表数据
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_csv(r'C:\Users\XXXXXX\Desktop\list_2_excel.csv',index=False,sep=',',mode='a',header=False)#header=False时,列名才不会追加进去。

4、pandas写入SQL数据库

4.1 df.to_sql()参数详情

df.to_sql(
name='table', #表名。
con=con, #连接。
if_exists='append', #判断这个表是否存在,若存在,添加。
index=False,#索引是否写入,否。
dtype={'col1':sqlalchemy.types.INTEGER(),
                 'col2':sqlalchemy.types.NVARCHAR(length=255),
                 'col_time':sqlalchemy.DateTime(),
                 'col_bool':sqlalchemy.types.Boolean
          }#每一列写入时的数据类型。可不填。
          )

4.2 实操案例

#导入必要的模块
import pandas as pd
from sqlalchemy import create_engine
import pymysql
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])

#连接MySQl
# engine = create_engine('mysql+pymysql://usrname:password@localhost:端口号/database')
engine = create_engine('mysql+pymysql://sh******ei:SCW*******scw@rm-uf6x********.mysql.rds.aliyuncs.com:3306/*****database')
con = engine.connect()
df.to_sql('to_sql测试',con=con,index=False,if_exists='append')

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

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

相关文章

nvdiffrec:Extracting Triangular 3D Models, Materials, and Lighting From Images

论文主页 https://nvlabs.github.io/nvdiffrec/git主页 https://github.com/NVlabs/nvdiffrec新闻报道 https://redian.news/wxnews/36324YuQiao0303 读后感 https://blog.csdn.net/qq_34342853/article/details/125622816b站演示效果视频 https://www.bilibili.com/video/BV1P…

8天获offer|祝贺信息技术老师获CSC资助赴意大利访学

I老师拟申报CSC青年骨干教师项目&#xff0c;指定欧洲学校&#xff0c;且要求半个月内获得邀请函。我们8天就取得了意大利帕多瓦大学的offer&#xff0c;研究方向完全相符&#xff0c;因而顺利通过了CSC审批。后经繁琐的手续&#xff0c;I老师最终获得签证&#xff0c;如期出国…

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法2)

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法2) 为什么要设置有效载荷Loaddata? 对于搬运应用的机器人只有设定正确的工具和载荷数据,机器人才能正确的工作; 对于搬运比较重的产品,或工具的重量也比较重,需要设置工具及搬运对象的重心和重量; …

2023年黑马Java入门到精通教程--程序流程控制

程序流程控制 程序执行的几种常见形式 分支结构 If分支 根据判定的结果&#xff08;真或假&#xff09;决定执行某个分支的代码 If分支的作用 If分支有三种格式 switch分支 也是匹配条件去执行分支, 适合做值匹配的分支选择&#xff0c;结构清晰&#xff0c;格式良好 swit…

通信原理笔记—基带信号的检测与最佳接收

目录 在加性白高斯噪声信道条件下数字基带信号的接收&#xff1a; 加性高斯白噪声干扰下的信号检测&#xff1a; 最大似然判决准则&#xff1a;误码率最小意义上的最佳判决&#xff1a; 先验等概及最佳判决时的误码率计算&#xff1a; 高斯噪声干扰下二进制信号的检测&…

Mock.js(简单代替后台)

Mock.js &#xff08;官网http://mockjs.com/&#xff09;是一款模拟数据生成器&#xff0c;旨在帮助前端开发人员独立于后端进行开发&#xff0c;帮助编写单元测试。二、为什么使用mockjs在做开发时&#xff0c;当后端的接口还未完成&#xff0c;前端为了不影响工作效率&#…

【实际开发12】- Utils / tools

目录 1. 自定义工具类 概念 / 解析 1. 构建方式 1. XxxClassl 类 public xxx() → new XxxClass() 2. XxxClassl 类 public static xxx() → XxxClass.xxx() 2. Interface 1. public interface XxxMapper → private final XxxMapper 2. public interface IXxxService →…

面经八,笔试加面试

Java 开发面试题&#xff0c;尧壁信科有限公司 笔试&#xff1a; 1、Java 中有几种类型的流&#xff1f; 字节流字符流&#xff0c;输入流输出流 2、什么是 java反射? 在程序的运行状态中&#xff0c;对于任意一个类&#xff0c;都可以知道整这个类的所有属性和方法&#xf…

如何锁定Excel表格的公式不被修改

很多小伙伴在制作Excel表格的时候&#xff0c;往往还会设置很多公式&#xff0c;但如果不小心或被他人随意修改了公式&#xff0c;就会造成数据错误&#xff0c;为了避免这种情况&#xff0c;其实我们可以设置保护&#xff0c;让公式锁定无法被修改。 下面举一个例子来看看如何…

【C语言 数据结构】串

文章目录串类型的定义串的表示和实现定长顺序存储堆分配存储表示串的块链存储表示串的模式匹配算法字串的定位函数匹配模式的改进算法串类型的定义 对于由多个字符&#xff08;≥ 0&#xff09;组成的字符串&#xff08;例如 http://data.biancheng.net&#xff09;&#xff0…

Git版本如何使用命令进行升级(win10)

1、桌面鼠标右键&#xff0c;点击Git Bash Here,输入git --version 查看目前Git版本。 2、输入git update-git-for-windows 升级版本&#xff0c;再输入y同意升级并覆盖之前的版本。 我在版本升级的过程中遇到了error: RPC failed&#xff1b; curl 92 HTTP/2 stream 0 was not…

SaaS-API越权漏洞检测系统

概述通过替换认证信息后重放请求&#xff0c;并对比数据包结果&#xff0c;判断接口是否存在越权漏洞特点支持HTTPS自动过滤图片/js/css/html页面等静态内容多线程检测&#xff0c;避免阻塞支持输出报表与完整的URL、请求、响应安装和使用安装依赖git clone https://github.co…

Eyeshot 2023 测试版,离发行版不远了

Eyeshot 2023 测试版 这个 Beta 版本来得太晚了&#xff0c;因为我们决定放弃许多客户不喜欢的 v2022 GEntities。该产品已根据以下架构进行了完全重构。例如&#xff0c;使用 Eyeshot 2023 可以非常轻松地在 Web 项目中使用没有 UI 的产品。这也简化了从 Eyeshot 2021 版的项…

【软件测试】6年资深测试总结的,测试人常常犯的9大误区,背锅不存在的......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、把原型设计、UI效…

Chapter3:机器人系统设计

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构

我作为企业文档的产品负责人&#xff0c;常常被问及企业文档和其他在线文档有啥差不一样的地方&#xff1f;我大致总结了下&#xff0c;有几个方面&#xff1a;1、企业文档定位于企业内部的内容管理工具&#xff0c;侧重于私有化部署。核心的是数据的控制权在企业自己手中&…

类和对象-对象特性

前言&#xff1a;主要讲述对象的初始化与清理&#xff0c;构造函数与析构函数&#xff0c;其分类和调用&#xff0c;以及调用时机等相关内容对象的初始化与清理&#xff1a;1.生活中我们买的电子产品都基本会有出厂设置&#xff0c;在某一天我们不用的时候也会删除一些自己的信…

Java基础多线程下篇

本篇本文目录:一.线程死锁1.重入锁2.释放锁3.死锁4.wait和notify二.锁1.ReentrantLock2.Condition3.ReadWriteLock4.StampedLock5.Semaphore6.线程并发安全(1) concurrent(2) atomic三.线程池1.通过线程池分配线程2.FixedThreadPool3.CachedThreadPool4.ScheduledThreadPool四.…

粒子输运的蒙特卡罗方法介绍

蒙特卡罗大部分改概念和方法不依赖空间的维度&#xff0c;可以先讨论一维情况下粒子的蒙特卡罗输运。单能粒子输运的玻尔兹曼方程可以写为&#xff1a;仅考虑散射和吸收EtEsEa吸收意味着粒子生命周期的终结。图2.1示例&#xff1a;通过蒙特卡罗方法确定目标几何体内外的中子分布…

宕机了,Redis 如何避免数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…