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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值