利用python对Excel进行读写操作

        最近在写论文做实验的过程中,利用python自带的matplotlib库进行绘画,但是尝尝会出现在程序跑完后发现图片里面有一些小细节没有注意到,导致整个代码重新跑。代码重新跑短则几小时,长则就不好说了,导致时间成本飞升。如果能将代码跑出来的数据导入到Excel中,利用Excel或者matlab来画图,不是就可以解决上述问题了。

        学习python对Excel进行读写操作,在此记录一下。

        python对Excel进行读操作:

一.利用pandas库来完成读操作

import pandas as pd

def pd_read(file_path):
    """
    :param file_path: 文件路径
    :return: 数据数组
    """
    dataset = pd.read_excel(file_path, header=0)
    return dataset

        当然.read_excel方法不仅仅只有上述代码中两个参数,下面对.read_excel方法常用的几个参数进行简单说明。

 

1.io:文件路径,可以是绝对路径或者相对路径
2.sheet_name:指定读取的sheet名。可以是数字,sheet名,以列表形式表现的sheet名
3.header:指定标题行,不指定默认第一行为标题行。header = None,没有标题行,所有都是数据
4.names:在header=None的前提下,补充列名。若header与names都存在的情况下,以names为标题行
5.index_col:用于指定那一列为行索引
6.usecols:用于指定读取的列。usecols = [1,2,3],读取第2-4列;usecols = None,读取所有列;其他形式的写法验证都不通过。
7.squeeze:如果源数据数据或者读取的数据只有一列,squeeze = False时读取的结果是*行1列的dataframe结构,如果squeeze = True时读取的结果是一个Series结构。
        虽然还有很多参数,没有介绍,个人认为这些是比较常用的。

        此外,利用.read_excel方法得到的返回值是DataFrame类型,他会自带行索引。

        对于DataFrame类型数据,可以使用.colums来获取列名(前提是设置了列名)。在进行切片操作的时候.iloc[n]用于读取第n行数据,注.iloc只能用数字进行索引;.loc['label']用于读取列名为label的列,注.loc只能通过列名进行索引。

二.利用csv库进行读操作:

import csv

def csv_read(file_path):
    with open(file_path, "r", encoding='utf-8') as f:
        f.readline()  # 去除CSV中第一行的值将指针设置在第二行
        reader = csv.reader(f)
        for row in reader:
            # 对每一行数据进行处理
            print(row)

        执行readline() 时,code会扫描文件中的每一个字节,直到找到一个 \n 位置,然后停止并读取此前的文件内容。并且fileobject 会记录每次调用readline()后的对于读取位置,这样readline()下次被调用的时候就会读取下一行。这里用到的方法是一行一行的读取数据,读取到的行数据进行需要的处理即可。

        注:csv方法打开Excel的.xslx文件会报错,可以先将.xslx转化成.csv文件。(如果有其他的办法,希望不吝赐教)

        python对Excel进行写操作:

一.使用openpyxl库中Workbook完成写操作

import numpy as np
from openpyxl import Workbook

def write_data(save_path, dataset):
    """
    :param save_path:保存路径 
    :param dataset: 要写入的数据集
    """
    wb = Workbook()  # 创建一个workbook

    ws = wb.active  # 调用活动的工作表
    ws.title = 'New Title'

    # ws1 = wb.create_sheet()  # 在当前workbook的结尾处追加一个新的worksheet,名称是自动赋值的,如Sheet1,Sheet2,....
    # ws2 = wb.create_sheet(index=0)  # 在当前workbook的指定索引处追加一个新的worksheet,名称是自动赋值的,如Sheet1,Sheet2,....
    # ws1.title = "New Title1"  # 指定sheet名称为New Title1
    # ws2.title = "New Title2"  # 指定sheet名称为New Title2

    m, n = np.shape(dataset)

    # 写入表头
    header = dataset.columns
    num_item = len(header)  # 505
    for i in range(num_item):
        ws.cell(1, i+1).value = header[i]

    # 写入数据
    for i in range(m):
        for j in range(n):
            ws.cell(i+2, j + 1).value = dataset.iloc[i, j]

    wb.save(save_path)  # 以上处理都是在内存中的,save表示将最终的结果导出到本地文件上

        所用的操作基本上都在代码中添加了备注,在这就不做过多的叙述了。

        ws.cell(x, y).value=data,是将data写入目标Excel文件的工作页的(x, y)位置。与python的下标不同Excel的下标起始是从1开始,在写入数据的时候需要注意一下。

二.利用csv库进行写操作:

import csv

def csv_save(save_path, dataset):
    with open("test.csv", "w", newline='') as csvfile:
        writer = csv.writer(csvfile)
        m = np.shape(dataset)[0]  # 行数
        # 获取表头
        header = dataset.columns
        writer.writerow(header)
        # 写入数据
        for i in range(m):
            writer.writerow(dataset.iloc[i])  # 一行一行的写入

        其中.writerow()是将一行数据写入,如果想同时写入多行就需要使用.writerows()方法.

        要注意一点的是,这里所有写操作使用的数据集是前面用pandas库读出来的数据,所以是DataFrame的形式。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值