首页 > 编程笔记 > Python笔记 阅读:2

Python pandas读取和写入Excel表格数据(附带实例)

pandas 是一个可以提供科学计算和数据分析相关功能的 Python 工具包,而且拥有简单、易上手的表格处理能力。

pandas 提供 read_excel() 和 read_csv() 两个函数,可以分别读取 Excel 表格和 CSV 表格文件,并将其中的数据加载为 pandas 所独有的 DataFrame 对象。

DataFrame 对象可以被简单理解为二维的表格数据。DataFrame的数据结构及其基本概念如下图所示。


图 1 DataFrame的数据结构及其基本概念

DataFrame 对象与图 1 中的数据可以一一对应。Column1~3 对应字段名称,所有的字段名称被统称为 columns,一行数据被称为 row,一列数据被称为 column。每条 row 都有一个索引值(index)。索引值默认是数字类型,从 0 开始排序,也可以指定为字符串等其他类型。DataFrame 对象可以被 pandas 转换为字典列表,每个字典就是一条 row 数据,字典的 key 对应 columns 中的列名。

Python pandas从表格读取数据

假设有两个网络设备清单的表格文件,分别是 inventory.csv 和 inventory.xlsx,表格文件的内容如下表所示。

表:网络设备清单表格的文件内容
name hostname device_type port username password
netdevops01 192.168.137.201 huawei 22 netdevops Admin123~
netdevops02 192.168.137.202 huawei 22 netdevops Admin123~

read_excel() 和 read_csv() 两个函数的第一个参数可以直接赋值为表格文件的路径。pandas 会将指定表格文件转换为 DataFrame 对象,并调用此对象的 to_dict() 方法,将 orient 参数赋值为 records,就可以将其转换成字典列表。

使用 pandas 的 read_excel() 函数从 Excel 表格中读取数据并转换为字典列表,实例代码如下:
import pandas as pd
 
devs_df = pd.read_excel('inventory.xlsx')
devs = devs_df.to_dict(orient='records')
print(devs)
'''结果输出一个字典列表,截取部分作为演示
[{'name': 'netdevops01', 'hostname': '192.168.137.201'... 'device_type': 'huawei!'}]
'''
read_excel() 会默认读取 Excel 表格中第一个 sheet 的数据,用户也可将 sheet_name 赋值为对应的页签排序(从 0 开始的整数类型)或者页签名称(字符串类型)。

read_csv() 函数用于读取 CSV 文件,对于初学者,只需要按位置将传参赋值传入 CSV 文件路径即可,其他操作与读取 Excel() 表格文件是一致的。使用 pandas 的 read_csv() 函数从 CSV 表格中读取数据并转换为字典列表,实例代码如下:
import pandas as pd
 
devs_df = pd.read_csv('inventory.csv')
devs = devs_df.to_dict(orient='records')
print(devs)
'''结果输出一个字典列表,截取部分作为演示
[{'name': 'netdevops01', 'hostname': '192.168.137.201'... 'device_type': 'huawei!'}]
'''
在读取表格数据时,pandas 会将表格数据自动转换成 pandas 中最适合的数据类型,在转换成字典列表时,也会将其转换为对应的 Python 数据类型。

pandas写入数据到表格

pandas 同样支持将数据写入表格,可以将数据整理成字典列表,再使用 pandas 将数据写入表格。

首先用字典列表去创建 DataFrame 对象,然后调用此对象的 to_excel() 方法,就可以将数据写入 Excel 文件。使用字典列表数据构建 DataFrame 对象并写入 Excel 表格文件,实例代码如下:
import pandas as pd
 
raw_data = [{'name': 'Eth1/1', 'desc': 'netdevops1'},
            {'name': 'Eth1/2', 'desc': 'netdevops2'}]
intf_df = pd.DataFrame(raw_data)
 
print(intf_df)
''' 从打印的结果中,读者可以看到DataFrame是一种二维矩阵的数据
     name        desc
0  Eth1/1  netdevops1
1  Eth1/2  netdevops2
'''
intf_df.to_excel('as01_info.xlsx', sheet_name='interfaces', index=False)
DataFrame 对象的创建方式多种多样,它接受类型非常多的 Python 数据,笔者推荐使用字典列表作为初始化的数据。

DataFrame 对象的 to_excel() 方法可将数据写入 Excel 表格,读者需要关注以下 3 个参数:
如果想将数据写入 CSV 表格文件,可以调用 DataFrame 对象的 to_csv() 方法,它的第一个也是最重要的参数是 path_or_buf,仍可以将其简单理解为 CSV 文件的路径名称。另外需要关注的是 index,其意义与 to_excel() 的 index 参数一致。因为 CSV 文件无页签,所以没有 sheet_name 参数。

使用字典列表数据构建 DataFrame 对象并写入 CSV 表格文件,实例代码如下:
import pandas as pd
 
raw_data = [{'name': 'Eth1/1', 'desc': 'netdevops1'},
            {'name': 'Eth1/2', 'desc': 'netdevops2'}]
intf_df = pd.DataFrame(raw_data)
 
intf_df.to_csv('as01_info.csv', index=False)
可以看到,通过 pandas,仅用 4 行代码就可以将字典列表写入表格文件中。

字典列表数据可以是登录网络设备执行命令并从回显中解析提取的数据,也可以是从控制器或者某自动化平台的 API 接口获取的 JSON 或者 XML 数据。在将这些数据写入表格后,常常会对数据进行消费,即对表格数据的加工处理,例如将原始表格数据处理后生成新的表格数据,或者写到某系统中,用于自动更新某些字段信息。在这个过程中,表格的写入仅是数据生产活动的一个中间环节。

相关文章