Pandas学习(完成文件写入、追加写入、读取操作)

问题引入

现在有这么一个需求

我要对我的很多设备进行快照处理,打完快照之后需要记录我的设备IP和快照时间

当我们解决了需求的其他内容,只剩记录信息的时候,可以怎么做呢

这时候就可以引入我们的pandas模块啦,它对数据进行一系列的数据

现在我先讲步骤列出,我们带着步骤进行学习

步骤

  1. 获取数据并进行处理
  2. 生成pd对象
  3. 将内容写入SCV
  4. 追加写入内容
  5. 读取文件中内容

前期准备

安装pandas

pip install pandas

导入包

import pandas

数据结构

Series

类似于表格中的一个列或者说一维数组

构造函数

pandas.Series( data, index, dtype, name, copy)

参数说明

  • data:一组数据(ndarray 类型)。
  • index:数据索引标签,如果不指定,默认从 0 开始。
  • dtype:数据类型,默认会自己判断。
  • name:设置名称。
  • copy:拷贝数据,默认为 False。

使用数组创建

a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar)

在这里插入图片描述

指定索引值

a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"])
print(myvar)

在这里插入图片描述

根据索引值读取数据

a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"])
print(myvar["y"])

使用字典创建

使用字典创建Series就不需要指定其索引值了,其字典中的key就变成了索引值

sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites)	
print(myvar)

在这里插入图片描述

如果只需要字典中的一部分数据,只需要指定需要数据的索引即可

sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2])	
print(myvar)

在这里插入图片描述

设置名称参数

sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )
print(myvar)

在这里插入图片描述

DataFrame

也是一个表格型的数据结构,它含有有一组有序的列,每列可以是不同的值类型。

它既有行索引也有列索引,可以看做是由Series组成的字典(共用一个索引)

在这里插入图片描述

参数说明

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。
  • index:索引值,或者可以称为行标签。
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  • dtype:数据类型。
  • copy:拷贝数据,默认为 False。

二维数组创建

data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
print(df)

在这里插入图片描述

使用 ndarrays 创建

data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)

在这里插入图片描述

使用字典创建

没有对应的部分数据为NaN

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)

在这里插入图片描述

获取行数据

使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1

返回结果也就是一个 Series 数据

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)
# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])

在这里插入图片描述

也可以返回多行数据,使用 [[ … ]] 格式,… 为各行的索引,以逗号隔开

此处返回的是 DataFrame 数据

# 返回第一行和第二行
print(df.loc[[0, 1]])

在这里插入图片描述

指定索引

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
print(df)

在这里插入图片描述

操作 CSV 文件

CSV文件多数以逗号分割,其文件以纯文本形式存储表格数据(数字和文本)

写入SCV文件

使用 pandas 的 to_csv 方法写入

# 三个字段 name, site, age
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
   
# 字典
dict = {'name': nme, 'site': st, 'age': ag}
df = pd.DataFrame(dict)
# 保存 dataframe
df.to_csv('site.csv')

在这里插入图片描述

读取CSV文件

df = pd.read_csv('文件名')
print(df.to_string())

to_String() 用于返回 DataFrame 类型的数据

如果不使用该函数,则输出数据的前面5行和后面5行,中间部分以 … 代替。

读取前几行

使用head() 方法,中间可以写入读取的行数,不填默认读取5行

df = pd.read_csv('文件名')
print(df.head(10))

读取后几行

使用tail() 方法,中间可以写入读取的行数,不填默认读取5行

df = pd.read_csv('文件名')
print(df.tail(10))

返回表格基本信息

使用 info() 方法返回表格的一些基本信息

df = pd.read_csv('文件名')
print(df.info())

解决问题

# 首先构造我们获取到的数据
data = [
    {'ip':'192.168.1.4','time':'2023-8-10'},
    {'ip':'192.168.1.6','time':'2023-8-10'},
]
# 写入csv文件进行保存
df = pd.DataFrame(data)
# index_label 设置不包含行索引
df.to_csv('test1.csv',index_label=False)

此时我们需要考虑之前如果已经保存过这个文件,那么我们的写入动作就变为追加写入

data = [
    {'ip':'192.168.1.4','time':'2023-8-10'},
    {'ip':'192.168.1.6','time':'2023-8-10'},
]
df = pd.DataFrame(data)
# 获取文件路径
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'test1.csv')
if os.path.exists(file_path):
    # 如果存在则追加写入
    df.to_csv('test1.csv', mode='a', index_label=False, header=False)
else:
    # 如果不存在则创建文件写入
    df.to_csv('test1.csv', index_label=False)
# 打印输出结果
df = pd.read_csv('test1.csv')
print(df.to_string())
# 查看 ip 列属性
list = df["ip"].tolist()
print(list)

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

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

相关文章

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 …

开源在线图片设计器,支持PSD解析、AI抠图等,基于Puppeteer生成图片

Github 开源地址: palxiao/poster-design 项目速览 git clone https://github.com/palxiao/poster-design.git cd poster-design npm run prepared # 快捷安装依赖指令 npm run serve # 本地运行将同时运行前端界面与图片生成服务(3000与7001端口),合成图片时…

【C语言学习】指针变量

一、运算符& 1.&运算符可以获得变量的地址,它的操作数必须是变量 int i; printf("%x",&i);2.地址的大小是否与int相同取决于编译器 int i; printf("%p",&i);//%p以32进制输出i的地址二、指针变量 指针变量是保存地址的变量…

JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)

需求分析 本系统主要是针对各个高校的学生学籍进行管理,系统满足以下几点要求: 系统安全性。由于此系统中的操作都是由用户操作的,所以对于用户的权限设置比较严格。对于数据库,设置了不同用户的权限,不同权限进入不…

【并发编程】详解并发编程中Synchronized的特性(可见性、有序性、可重入性、禁止指令重排序)(๑•̀ㅂ•́)و✧

1、synchronized 禁止指令重排分析 我们先看如下代码: class MonitorExample {int a 0;public synchronized void writer() { //1a; //2} //3public synchronized void reader() { //4int i …

[虚幻引擎] UE使用虚拟纹理在模型上显示挖空效果

此教程是记录如在UE中使用虚拟纹理,实现模型挖洞的效果。 1. 新建项目,开启项目支持虚拟纹理并并重启。 2. 新建一个基础关卡 3. 拖动“运行时虚拟纹理体积” 进入场景,并把体积修改变大,以可以完全包括到地板。 4. 创建一个虚拟纹…

记一次从Redis弱口令到RCE

Fscan扫描网段发现了一些开启了6379的服务器,逐个尝试了下未授权,然后尝试了下爆破 hydra爆破redis hydra -P [字典目录] redis://xxx.xxx.xxx.xxx结果还真让爆出来一个 得到密码后,连接上去,这里用的是Another Redis Desktop M…

FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是适用于BLDC、PMSM和ACIM电机控制应用的高性能解决方案。这些MCU采用运行频率为100MHz/120MHz、带数字信号处理 (DSP) 和浮点单元 (FPU) 的ARM Cortex-M4内核。KV3x MCU配备两个采样率高达1.2MS/s的16位ADC、多个控制定时器以及512KB闪存。 …

Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点

使用Element的组件Table表格,当使用树形数据再配合上多选框,如下: 会出现一种问题,点击左上方全选,只能够选中一级树节点,子节点无法被选中,如图所示: 想要实现点击全选就选中所有的…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

【引言】 “JS卡片支持为组件设置action,包括router事件和message事件,其中router事件用于应用跳。若设置router事件,则action属性值为"router";abilityName为卡片提供方应用的跳转目标Ability名;params中的…

stm32的命令规则

stm32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

面试题-React(三):什么是JSX?它与常规JavaScript有什么不同?

在React的世界中,JSX是一项引人注目的技术,它允许开发者在JavaScript中嵌套类似HTML的标签,用于描述UI组件的结构。本篇博客将通过丰富的代码示例,深入探索JSX语法,解析其在React中的用法和优势。 一、JSX基础语法 在…

陕西广电 HG6341C FiberHome烽火 光猫获取超级密码 改桥接模式 提升网速

光猫默认的路由模式实测在100M宽带下只能跑到60M左右,只有改成桥接模式才能跑满,不损失性能。但是改桥接需要给运营商打电话,有的时候不想麻烦他们,这时获取超级密码进行更改就是一个不错的选择了 分析 之前写了一篇HGU B2 光猫的…

触摸屏与PLC之间 EtherNet/IP无线以太网通信

在实际系统中,同一个车间里分布多台PLC,用触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大耽误工期,这种情况下比较适合采用无线通信方式。 本方案以MCGS触摸屏和…

IO流笔记

文件基础知识 创建文件 package org.example; import org.junit.Test;import java.io.File; import java.io.IOException;public class FileCreate{public static void main(String[] args) {}Test//方式1:new File(Strin pathname)public void create01(){File fil…

在线零售供应链管理:从0到100

全球57%的公司将其供应链视为竞争优势,然而只有6%的人表示完全了解它。无论您是首次在线卖家还是经验丰富的专业人士,驾驭管理高效且具有成本效益的零售供应链的复杂性都可能具有挑战性。一起来了解一下吧! 供应链管理是什么?它基…

Python网络爬虫入门到实战

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 网络爬虫(We…

Java并发编程第5讲——volatile关键字(万字详解)

volatile关键字大家并不陌生,尤其是在面试的时候,它被称为“轻量级的synchronized”。但是它并不容易完全被正确的理解,以至于很多程序员都不习惯去用它,处理并发问题的时候一律使用“万能”的sychronized来解决,然而如…

1.0的星火2.0必将燎原——图文声影PPT全测试

一、前言 大家好,勇哥又来分享AI模型了,前几天讯飞发布的星火大模型2.0迅速的进入了我们圈子里,为了有更多更好的模型分享给大家,分享星火大模型2.0是必须做的,我做一个传递着,希望大家也星火相传啊。 我…