使用pandas读取表格数据并进行单行数据拼接的详细教程


Posted in Python onMarch 03, 2021

业务需求

一个几十万条数据的Excel表格,现在需要拼接其中某一列的全部数据为一个字符串,例如下面简短的几行表格数据:

id code price num
11 22 33 44
22 33 44 55
33 44 55 66
44 55 66 77
55 66 77 88
66 77 88 99

 现在需要将code的这一列用逗号,拼接为字符串,并且每个单元格数据都用单引号包含,需要拼接成字符串'22','33','44','55','66','77',这样的情况,我们需要怎么处理呢?当然方式有很多……

多行文本批量处理

有的时候,我们会遇到需要同时处理多行文本的情况,很多文本编辑器都支持批量操作多行文本,这里我主要说一下Sublime Text,下面是操作的快捷键,有需要的可以尝试用一下,确实挺方便的。

  • 选中需要操作的多行,按下Ctr+Shift+L即可同时编辑这些行
  • 鼠标选中文本,反复按CTRL+D即可继续向下同时选中下一个相同的文本进行同时编辑
  • 鼠标选中文本,按下Alt+F3即可一次性选择全部的相同文本进行同时编辑

如何节省效率

在工作中,可能会存在一些表格数据处理的情况,比如运营给你一个表格,表格里有类似:订单号呀、产品ID啊、商品SKU等,需要你协助导出这些数据里的明细数据以便他们做分析用,一两次,我们可以快速用上面的方式处理,但是这种方式对于大文本的处理可能会存在卡顿的情况,操作效率较低,如果小文本的话,那么还是很方便的。
如果多次遇到这种情况,是否想要做成一个工具来快速处理呢,也就是,这种批量拼接同样格式的数据,我们可以写一个小工具来实现,即快速又省事,可以大大减少重复的工作消耗。

pandas读取表格数据并处理

这我们使用Python的pandas模块来读取表格指定某列的数据,再按照我们的拼接格式进行循环处理,最终把拼接的字符串写入文本文件中,方便保留和使用拼接的数据。

sheet = pandas.read_excel(io=file_name, usecols=[line_num])
data = sheet.values.tolist()
str_data = ''
# 循环处理数据
print_msg('已获取列数据条数[' + str(len(data)) + '],开始处理数据……')
for x in range(len(data)):
  if str(data[x][0]) != 'nan':
    str_data += "'" + str(data[x][0]) + "',"

完整源码

因为脚本需要多次使用,并且针对不同文件的不同列,所以,我们采用接受关键参数的形式,可以不改动任何代码,就可以直接使用此脚本来完整我们的数据拼接,同时,我们还可以使用pyinstaller模块来将脚本进行打包成exe的window可执行文件,使其在无Python的运行环境中也可以使用,打包命令为:pyinstaller -F -i favicon.ico join_excel_data.py,我已有打包的上传到交友网站Github上,大家有兴趣的话,可以点击查看哦,交个朋友地址:github.com/gxcuizy

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
拼接Excel表格单行数据,并写入文本
author: gxcuizy
time: 2021-03-01
"""

import pandas
import random
import os
import time


def print_msg(msg=''):
  """打印信息"""
  now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  print('[' + now_time + '] ' + msg)


# 程序主入口
if __name__ == "__main__":
  # 获取传入参数
  file_name = input('请输入当前目录下的表格文件名(例如“01.xlsx”):')
  line_num = input('请输入要拼装的数据第几列(例如“1”):')
  # 判断文件是否存在
  if os.path.exists(file_name) == False:
    print_msg('文件不存在')
    os.system("pause")
    exit(0)
  # 判断输入的行数是否为数字
  if line_num.isdigit() == False:
    print_msg('请输入列数的数字')
    os.system("pause")
    exit(0)
  try:
    # 获取表格数据
    print_msg('开始获取文件[' + file_name + ']的第[' + str(line_num) + ']列数据')
    line_num = int(line_num) - 1
    sheet = pandas.read_excel(io=file_name, usecols=[line_num])
    data = sheet.values.tolist()
    str_data = ''
    # 循环处理数据
    print_msg('已获取列数据条数[' + str(len(data)) + '],开始处理数据……')
    for x in range(len(data)):
      if str(data[x][0]) != 'nan':
        str_data += "'" + str(data[x][0]) + "',"
    # 写入文本文件
    print_msg('数据处理完毕,开始写入……')
    random_num = random.randint(1000, 9999)
    with open('str_' + str(random_num) + '.txt', 'w') as f:
      f.write(str_data.strip(','))
    print_msg('数据写入完毕.')
  except Exception as err_info:
    # 异常信息
    print_msg(str(err_info))
  # 防止exe程序执行结束闪退
  os.system("pause")

到此这篇关于使用pandas读取表格数据并进行单行数据拼接的详细教程的文章就介绍到这了,更多相关pandas读取表格并拼接内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Mysql自动备份脚本
Jul 14 Python
python实现基本进制转换的方法
Jul 11 Python
Python中shape计算矩阵的方法示例
Apr 21 Python
Python合并多个Excel数据的方法
Jul 16 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python常用模块函数代码汇总解析
Aug 31 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
python爬取某网站原图作为壁纸
Jun 02 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 #Python
神经网络训练采用gpu设置的方式
Mar 03 #Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 #Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 #Python
python上下文管理的使用场景实例讲解
Mar 03 #Python
pip install命令安装扩展库整理
Mar 02 #Python
python实现杨辉三角的几种方法代码实例
Mar 02 #Python
You might like
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python实现中文输出的两种方法
2015/05/09 Python
Python 实现简单的电话本功能
2015/08/09 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Python正则表达式经典入门教程
2017/05/22 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
python处理RSTP视频流过程解析
2020/01/11 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
优纳科技软件测试面试题
2012/05/15 面试题
社区好人好事材料
2014/12/26 职场文书
体育教师个人工作总结
2015/02/09 职场文书
超市督导岗位职责
2015/04/10 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
毕业酒会致辞
2015/07/29 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers