python处理excel数据

2023-11-18


前言

帮朋友做一份数据处理,但是由于对excel的不熟悉,所以还是使用了python去做。本文主要是简单的python处理excel数据,具体服务于特定形式的excel表格


一、用到的模块是什么?

  1. xlrd
    主要用于读取excel文件(由于一开始没有用到xlwings去读,所以后面也懒得改了)
  2. xlwings
    主要是用于写excel文件(因为xlwt写好像只能一次处理256列,所有后面用到xlwings去写)

二、execl表格的样式

要处理的excel表格
上图是要处理的excel表格,主要是有两个关注点:一是证券代码,二是回报率。每个股票都每一天都有不一样的回报率,这一张表中大概有43万条数据,而我要做的就是将数据整合在另一个表中,就是下图中的表。在这里插入图片描述
上图中关注的重点就是第一行的数据,而时间则是不太需要关注的,因为从第一张表的所得到的数据的时间已经是有序排列的了。

三、模块的使用

1.引入模块

代码如下(示例):

import xlrd
import xlwings as xw
import time	#可不用
from progressbar import ProgressBar, Percentage, Bar #可不用

2.读取excel表数据

代码如下(示例):

sheet_done= xlrd.open_workbook(done_file_name).sheet_by_index(0)
for i in range(sheet_done.ncols):  # 获取需要的证券代码
    value.append(sheet_done.col_values(i))

该处主要是xlrd的使用。

3.将写入excel表

代码如下(示例):

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
wb = app.books.open(file)
sheet.range('A1').options(transpose=True).value = list1
wb.save()
wb.close()
app.quit()

该处主要是xlwings的使用。

四、代码分析

1.代码逻辑

首先根据两个表的类似点可以得出,只要将股票号与回报率作一一对应就好了,时间已经是个有序排列了,在此可以忽略。那整个代码的逻辑就是要先将股票号跟回报率所关联起来,接着就另一个excel表中一列一列的写就好了。

2.选出有用的股票号并与回报率关联

代码如下(示例):

for i in range(sheet_done.ncols):  # 获取需要的证券代码
      value.append(sheet_done.col_values(i))
def set_dic(dic, value):
    for i in range(len(value) - 1):
        global_num.append(value[i + 1][0])
        dic[value[i + 1][0]] = 0

由于最后需要的股票号不一定与全部数据中的股票号所对应,所以要先筛选出需要用到的股票号。然后运用字典,key则是股票号,key所对应的值就是每支股票每天的回报率,刚好我们后面使用的写excel的函数也是需要用到列表。
设置好关联
设置好关联后大概是这个样子的,后面就是往里面填入数据

3.将全部数据按照所需要的股票号进行分类

代码如下(示例):

def get_rate_by_num(num, value):
    """
    根据股票分类相对应的利率
    :param num: 股票编号
    :param value: 整张表格数据
    :return:
    """
    print("开始分类数据:" + time.strftime("%Y-%m-%d %H:%M:%S"))

    for i in range(len(value)):
        if value[i][0] == "000001":
            break
    current_row = i

    offset = 0
    rate = []
    for i in range(len(num)):
        for j in range(len(value) - current_row):  # 去除无用数据 开始轮询
            j = j + offset
            if num[i] == value[j + current_row][0]:  # 判断是否是需要的数据
                rate.append(value[j + current_row][2])  # 将需要的数据放入rate[]
                if j + current_row == len(value) - 1:  # 判断是否为最后一个数据
                    break
            else:
                if check_num(value[j + current_row][0]):  # 判断数据是否是需要的
                    offset = j  # 下次轮询就从上一个数据的末尾开始
                    break
                else:
                    continue
        global_value[num[i]] = rate
        rate = []
    print("结束分类数据:" + time.strftime("%Y-%m-%d %H:%M:%S"))

这里就是根据之前得出的有效股票号去进行轮询整张表格去进行匹配,然后将匹配到的值放入上面的字典中。这里有个小窍门就是根据我们的excel格式可以得出股票号都是按顺序来的,只要完成这一次股票号的分类后,那么接下来就不会再出现相同的股票号。所以每次轮询的使用不用由头到尾进行,只需要从每次分类好后的坐标进行轮询就好了。这里一开始我是每次都由头到尾进行查找,耗时可能都有30分钟了,后面改了后只需几秒。
分类好的数据

4.将分类好的数据写入excel

代码如下(示例):

def write_excel_by_num(file):
    """
    根据对应的股票号,将相对应的数据写入excel列中
    :param num: 股票号
    :param value: 数据
    :return: None
    """
    print("开始写excel:" + time.strftime("%Y-%m-%d %H:%M:%S"))

    app = xw.App(visible=False, add_book=False)
    app.display_alerts = False
    app.screen_updating = False

    wb = app.books.open(file)

    progress_bar = ProgressBar(widgets=["正在写入", Percentage(), Bar()], maxval=len(global_value.keys())).start()
    sheet = wb.sheets['Sheet1']
    for i in range(len(global_value.keys())):
        progress_bar.update(i)
        sheet.range(get_cell_num(i + 1, cell_num_list)).options(transpose=True).value \
            = global_value[list(global_value.keys())[i]]
    progress_bar.finish()
    wb.save()
    wb.close()
    app.quit()
    print("结束写excel:" + time.strftime("%Y-%m-%d %H:%M:%S"))

写excel这边就是逐列写入,但由于不知道怎么确定写的时候那一列的单元格编号所以需要写一个函数根据这个数据在excel表格中的位置对应出他的单元格编号,get_cell_num()就是可以得到对应的单元格编号

五、成果展示

运行截图
在打开excel跟写excel的时候还是比较慢的,但分类40万个数据还是挺快的。处理一次数据(40万左右)并写入新的excel表中大概是要2分钟的样子。
处理好的数据


总结

本来主要是将excel数据分类导入至另一个excel表中,但对两个表的样式有比较高的要求,换了个样式就无法使用了。所以还是觉得应该用excel能有更好的方法,或者python里面别的模块处理上能更方便。要是有更好的方法,请留言告知我一声,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python处理excel数据 的相关文章

  • 指定的可执行文件不是该操作系统平台的有效应用程序。

    我不断收到错误消息System ComponentModel Win32Exception The specified executable is not a valid application for this OS platform 当
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • 使用 Tkinter 进行多线程 Python

    我用这些函数在画布上画小圆圈 这是绘制圆圈的函数 class Fourmis def init self can posx posy name radius self can can self largeur can int self ca
  • @monthly cron 作业不可靠

    我们的客户希望我们每月创建一份报告 过去 我们使用 monthly cron 作业来完成此任务 但这并不可靠 服务器可能会在这一分钟内宕机 Cron 不会重新运行这些作业 如果服务器已启动 此时数据库可能无法访问 如果服务器已启动且数据库已
  • Python 包?

    好吧 我认为无论我做错了什么 它可能都是显而易见的 但我无法弄清楚 我已经阅读并重新阅读了有关包的教程部分 我唯一能想到的是这不起作用 因为我直接执行它 这是目录设置 eulerproject init py euler1 py euler
  • 将这个使用 lambda 解包的元组从 Python 2 移植到 Python 3 的最 Pythonic 方法

    我有以下 Python 2 代码 它在 lambda 中解压元组 该 lambda 包含在 for 循环内 for lab lab pred length in zip labels labels pred sequence lengths
  • 在 Django 中上传文件

    我在 Django 1 6 版本 中上传文件时遇到问题 当我尝试做的时候new file data save 在我的views py 中我收到此错误 quiz patent 22 medical record 2 exams 处的属性错误
  • Python ttk.combobox 强制发布/打开

    我正在尝试扩展 ttk 组合框类以允许自动建议 我到目前为止的代码运行良好 但我想让它在输入一些文本后显示下拉列表 而不从小部件的输入部分移除焦点 我正在努力解决的部分是找到一种强制下拉的方法 在 python 文档中我找不到任何提及这一点
  • Python Subversion 包装器库

    在颠覆的文档 http svnbook red bean com en 1 7 svn developer usingapi html svn developer usingapi otherlangs有一个从 Python 使用 Subv
  • 使用 gin 索引和 sqlalchemy 返回排名搜索结果

    我为全文搜索设置了 GIN 索引 我想获取与搜索查询匹配的记录列表 按排名排序 记录与搜索查询的匹配程度 对于结果 我只需要记录及其列 不需要用于排序的实际排名值 我有以下查询 它运行良好并从我的 postgresql 数据库返回预期结果
  • Python Pandas groupby、排名,然后根据自定义排名分配值

    问题设置 大熊猫数据框 df pd DataFrame Group A A A A A A A A A Subgroup Group 1 Group 1 Group 1 Group 1 Group 1 Group 1 Group 2 Gro
  • 为线条指定颜色

    我试图在 matplotlib 中绘制可变数量的行 其中 X Y 数据和颜色存储在 numpy 数组中 如下所示 有没有办法将颜色数组传递到绘图函数中 这样我就不必采取额外的步骤来单独为每条线分配颜色 我是否应该将 RGB 颜色数组转换为另
  • 如何判断Python对象是否是字符串?

    如何检查 Python 对象是否是字符串 常规字符串或 Unicode Python 2 Use isinstance obj basestring 对于要测试的对象obj Docs https docs python org 2 7 li
  • 来自异常导入 PendingDeprecationWarning ModuleNotFoundError:没有名为“异常”的模块

    我正在尝试使用Python 创建一个word 文档 我在终端中 pip install python docx 我的代码如下所示 from docx import Document document Document document sa
  • 默认可变参数的惯用方式

    在 python 中 如果直接将可变类型设置为默认参数 则会出现众所周知的边缘情况 def foo x return x y foo y append 1 print foo 通常的解决方法是将参数默认为None然后将其放入体内 然而 有
  • 在Python中使用Counter()来构建直方图?

    我在另一个问题上看到我可以使用Counter 计算一组字符串中出现的次数 所以如果我有 A B A C A A I get Counter A 3 B 1 C 1 但现在 我如何使用该信息来构建直方图 对于您的数据 最好使用条形图而不是直方
  • 我的 R 平方分数为负,但使用 k 倍交叉验证的准确度分数约为 92%

    对于下面的代码 我的 r 平方分数为负 但使用 k 折交叉验证的准确度分数为 92 这怎么可能 我使用随机森林回归算法来预测一些数据 数据集的链接在下面的链接中给出 https www kaggle com ludobenistant hr
  • 按工作日分组的熊猫 (M/T/W/T/F/S/S)

    我有一个 pandas 数据框 其中包含 YYYY MM DD arrival date 形式的时间序列 作为索引 我想按每个工作日 周一到周日 进行分组 以便计算其他日期列是平均值 中位数 标准差等 我最终应该只有七行 到目前为止我只知道
  • Python 中的数据可用性图表

    我想知道Python是否有一些东西可以绘制具有多个变量的时间序列的数据可用性 下面显示了一个示例 取自Visavail js 时间数据可用性图表 https github com flrs visavail 1 description 以下
  • 多行 x 刻度标签

    我正在尝试制作类似于此 Excel 示例的图 我想知道 x 刻度标签上是否有第二层 例如 5 年统计摘要 我知道我可以使用制作多行刻度标签 n但我希望能够独立地转换这两个级别 这很接近 fig plt figure figsize 8 4

随机推荐

  • Flask读取RTSP视频流,及其简单的一个案例

    Flask读取RTSP视频流 及其简单的一个案例 此章节包括通过是使用Flask可以实时地显示RTSP视频流 代码确实非常简单 源于Github 主要为为Nvidia Deepstream极致细节 3 Deepstream Python R
  • 华为怎么显示返回按键_华为怎么把返回那三个键调出来

    华为怎么把返回那三个键调出来 其实这个方法一点都不难 1 首先在华为nova3的桌面找到 设置 并点击进入 2 点击打开 系统 3 在系统菜单下 点击进入 系统导航 4 点击勾选 屏幕内虚拟导航栏 即可打开虚拟导航 不勾选即可直接关闭虚拟导
  • vscode配置快捷键注释模板

    文章目录 前言 一 打开配置项 1 首选项编辑配置 2 新建代码片段 3 配置注释文件名 二 新建代码注释模板 三 注释使用 前言 本篇文章可以在vscode中配置快捷键显示代码的信息注释 如作者 描述 创建时间等 一 打开配置项 1 首选
  • SD卡中FAT32文件格式快速入门(图文详细介绍)

    说明 MBR Master Boot Record 主引导记录 DBR DOS Boot Record 引导扇区 FAT File Allocation Table 文件分配表 硬件 本文SD卡为Kingston 4GB FAT32格式 簇
  • 【Python】 Pandas数据导入与导出

    数据读取 import pandas as pd data pd read csv data csv 读取数据文件 print data 数据索引与查看 x data loc x 读取表头为 x 的那一列的数据 print x y data
  • 如何自学现代计算机科学(转)

    简介 这里收集了很多学习资源 都是关于一些适合本科生学习的计算机科学 话题 Topics 这里仅仅只提供 话题 列表 而不会提供诸如知识点剖析 练习题等内容 如果你对某一个话题特别感兴趣 想深入研究一下 但又买不起文中提到的书籍 实体书 那
  • 使用docker搭建FastDFS文件系统

    使用docker搭建FastDFS文件系统 1 拉取fastdfs镜像 docker search fastdfs 这里要选择 delron fastdfs 镜像 docker pull delron fastdfs 2 启动容器 2 1
  • 车祸相关公开数据集(免费下载)

    Vehicle Collisions 纽约市机动车与人相撞 背景描述 这是 2021 年在纽约发生的人与机动车碰撞事故的数据 仅过滤掉超过 1 000 美元的受伤或死亡案件 总结了事件的日期和时间 受伤的位置以及警方对事件的描述 数据说明
  • Dubbo源码分析-Spring与Dubbo整合原理与源码分析(二)

    Spring与Dubbo整合的整体流程 基于apache dubbo 2 7 15 因为dubbo有较多的兼容以前的代码比如 DubboReference 以前就有两个版本 Reference 和 com alibaba dubbo con
  • list 分组_学习笔记系列_10_数据聚合与分组操作

    开篇导包 一 数据聚合 df groupby 详解 DataFrame 参数 by 用作分组的条件对象 mapping function label or list of labels axis 轴方向 0 or index 1 or co
  • Golang笔记:UDP基础使用与广播

    文章目录 目的 基础说明 作为服务器使用 作为客户端使用 广播 总结 目的 UDP是比较基础常用的网络通讯方式 这篇文章将介绍Go语言中UDP基础使用的一些内容 本文中使用 Packet Sender 工具进行测试 其官网地址如下 http
  • 大数据常见错误解决方案(转载)

    1 用 bin spark shell启动spark时遇到异常 java net BindException Can t assign requested address Service sparkDriver failed after 1
  • java代理

    静态代理 import java util logging Level import java util logging Logger 定义接口 代理类和被代理类都要实现这个接口 interface IHello public void h
  • KALI中Arping的使用方法(2023)

    一 介绍 ARP协议是 Address Resolution Protocol 地址解析协议 的缩写 在同一以太网中 通过地址解析协议 源主机可以通过目的主机的IP地址获得目的主机的MAC地址 arping程序就是完成上述过程的程序 arp
  • 【YOLOv5-6.x】解决加入CA注意力机制不显示FLOPs的问题

    1 问题描述 问题源自之前写的一篇博客 魔改YOLOv5 6 x 中 加入ACON激活函数 CBAM和CA注意力机制 加权双向特征金字塔BiFPN 尝试在YOLOv5的backbone中加入Coordinate Attention 虽然加入
  • 程序员应了解的那些事(5)C++迭代器之iterator_traits/iterator_category

    lt 1 gt traits 所谓traits 可以理解为 萃取机 作用就是 你丢给他什么东西 他会给你拿出你想要的特性 迭代器的特性 iterator traits lt gt lt 2 gt 迭代器的属性迭代器是沟通算法和容器的桥梁 一
  • 小程序获取链接中的参数

    onLoad function options if options null options undefined options sharetype null options sharetype gt 0 console log opti
  • 【Android入门到项目实战-- 7.3】—— 如何调用手机摄像头和相册

    目录 一 调用摄像头拍照 二 打开相册选择照片 学完本篇文章可以收获如何调用手机的摄像头和打开手机相册选择图片功能 一 调用摄像头拍照 先新建一个CameraAlbumTest项目 修改activity main xml 代码如下 按钮打开
  • 零基础学习hadoop到上手工作线路指导(不断更新)

    本帖最后由 pig2 于 2014 2 23 10 22 编辑 零基础学习hadoop 没有想象的那么困难 也没有想象的那么容易 在刚接触云计算 曾经想过培训 但是培训机构的选择就让我很纠结 所以索性就自己学习了 整个过程整理一下 给大家参
  • python处理excel数据

    文章目录 前言 一 用到的模块是什么 二 execl表格的样式 三 模块的使用 1 引入模块 2 读取excel表数据 3 将写入excel表 四 代码分析 1 代码逻辑 2 选出有用的股票号并与回报率关联 3 将全部数据按照所需要的股票号