也是最近的一个需求, 将一个 Excel 表, 多列转多行, 就把那种行的, 业务人员经常搞的那种垃圾表,给它转为咱熟悉的数据库表的形式, 多列转多行. 还要帮他们处理数据, 恶心得一批, 其实也不一定非要用什么 Pandas , 就循环遍历二维数据而已, 可能是, Pandas 比较很好, 就总是会将它作为我的第一选择, 事实证明, 它确实无敌强, 理论上能处理任何数据的骚操作.

需求

注: 写错字了, 木有 "两", 就是 前 4 列, 尴尬得一批.

方案

  • 读取数据为一个数据, 用 Pandas 来读, iloc 来索引值, 根据下标
  • 两个 for 循环, 分别代表两个方向 (垂直 和 水平) 谁先谁后, 无所谓的, 结果不变, 只是顺序变了.
  • 假设我们, 外层循环为水平方向, 内层则为 垂直方向. (外层每移动 1 列, 内层则移动 n 行)
  • 最后把所有的结果, 拼接起来, 存为 Excel 即可

实现

这里我用我小伙伴的代码吧, 自己就不写了, 写啥代码, 要什么自行车.. 会搬砖, 收藏, 还有模仿, 这才是代码成功之道

核心代码

df = pd.read_excel(file_path)

columns = df.columns.values

# 需要转置的那部分 DF
row_n = df.shape[0] -1
col_n = df.shape[1] - 4 ret = [] # 大列表来存储所有的 # 外层水平向右1列, 内层垂直向下遍历移多行
for i in range(col_n):
for j in range(row_n):
# 索引取值 iloc[行索引,列索引] 即可
lst = [ # 先取前四列, j+1 是为了跳过第 2 行
df.iloc[j+1, 0], df.iloc[j+1, 1],
df.iloc[j+1, 2], df.iloc[j+1, 3], # 再取当前列的, 前两行, 和 对应的值 (i,j) 再来3个字段 columns[i+4], # 当前的列名, columns 是列字段列表
df.iloc[0, i+4], # 第一行,当前列的那个值, 即字段下面那个
df.iloc[j+1, i+4] # j 是不断往下走, 边走边取值
] # 每一次取值, 则作为新数据的一行
ret.append(lst) # 最后再将这个新的二维数据变为 DataFrame, cols 自定义, 存 Excel 即可

之列来一波运行效果呀

完整代码

import pandas as pd 

def get_data(file_path):
"""将Excel读取为DF"""
return pd.read_excel(file_path) def col_to_row(df):
"""多行转多列,返回转好的二维数组"""
columns = df.columns.values
# 需要转置的那部分 DF
row_n = df.shape[0] -1
col_n = df.shape[1] - 4 ret = []
for i in range(col_n):
for j in range(row_n):
# 索引取值 iloc[行索引,列索引] 即可
lst = [
# 先取前四列, j+1 是为了跳过第 2 行
df.iloc[j+1, 0], df.iloc[j+1, 1],
df.iloc[j+1, 2], df.iloc[j+1, 3],
# 再取当前列的, 前两行, 和 对应的值 (i,j) 再来3个字段
columns[i+4],
df.iloc[0, i+4],
df.iloc[j+1, i+4]
]
# 每一次取值, 则作为新数据的一行
ret.append(lst) return ret def save_excel(d2_array, col_names, save_path):
"""将一个二维数组,拼接为DF 再存为Excel"""
pd.DataFrame(d2_array,
columns=col_names).to_excel(
save_path, index=False
) # 主逻辑
data = get_data("D:/test_data/多列转多行.xlsx") # 获取数据
d2_array = col_to_row(data) # 处理数据 col_names = ['name','gender','age', 'major', 'I', 'AM', 'NB']
save_excel(d2_array, col_names, "D:/youge.xlsx") # 存储数据 print("ok!")

然后来看一波, 结果, 从 Excel.

小结

  • 行列转换, 除了用什么 stack(), pivot, melt 之类的, 也有看需求, 暴力来循环的
  • 这个案例关键在于, 两个 for 循环来移动取值(下标) , 类似于, 指针移动在二维数组中
  • 理解原理就行, 多搬砖和收藏点赞才是偷懒的唯一途径

Pandas 实现 Excel 多列 转 多行的更多相关文章

  1. pandas 将excel一列拆分成多列重新保存

    利用pd.read_excel   做到将第二列“EVT-LBL”按“-”分割后重新加三列在df后面 1 读取表格df 2. 分割第二列短横连接的数字,保存到df2---- 参考:str.spilt( ...

  2. JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ...

  3. python读取Excel整列或整行数据

    单元格拆分 def get_index(capital): """ 大写字母(Excel列头)转数字 :param capital: 'A' --> 0, 'AA' ...

  4. pandas读取excel中指定数据的行数

    shuju = pd.read_excel(filename) loandata = pd.DataFrame(shuju) ncol = (len(loandata.keys())) data = ...

  5. pandas删除满足特定列信息的行记录

    #!/usr/bin/python import pandas as pd df = pd.read_excel('c:\data\zichan.xlsx') df_sn = pd.read_exce ...

  6. Excel中列宽、行高与像素的换算公式

    DPI             Scale      ColumnWidth             RowHeight 72dpi           75%       cw=(pix-5)/6  ...

  7. 机器学习之数据预处理,Pandas读取excel数据

    Python读写excel的工具库很多,比如最耳熟能详的xlrd.xlwt,xlutils,openpyxl等.其中xlrd和xlwt库通常配合使用,一个用于读,一个用于写excel.xlutils结 ...

  8. pandas 读写excel 操作(按索引和关键字读取行和列,写入csv文件)

    pandas读写excel和csv操作总结 按索引读取某一列的值 按关键字读取某一列的值 按关键字查询某一行的值 保存成字典并写入新的csv import pandas as pd grades=pd ...

  9. Pandas: 如何将一列中的文本拆分为多行? | Python

    Pandas: 如何将一列中的文本拆分为多行? 在数据处理过程中,经常会遇到以下类型的数据: 在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行. 在上图中,列名 ...

  10. C# 得到EXCEL表格中的有效行数和列数

    每种方法中上面的是Excel的行数,下面的是Excel的列数.方法七:经过加工修改已经可以读出来的是有效数据行 using Excel = Microsoft.Office.Interop.Excel ...

随机推荐

  1. [翻译] 为什么 Tracebit 用 C# 开发

    原文: [Why Tracebit is written in C#] 作者: [Sam Cox (Tracebit联合创始人兼CTO)] 译者: [六六] (译注:Tracebit成立于2022年, ...

  2. C51基础知识总览

  3. 解释 Git 的基本概念和使用方式

    Git是一种分布式版本控制系统,常用于管理和追踪软件开发项目的代码.以下是Git的基本概念和使用方式的解释: 仓库(Repository):Git管理代码的基本单位,可以理解为一个存储代码历史和版本信 ...

  4. Vigenere密码无密钥求解

    0.前言 最近摸了很长时间的鱼,然后最近突然想搞一个Vigenere密码的自动求解,花了不到一天来实现了一下这个东西,不过受限于自己的水平,没有搞的太难.当然,代码部分不是全部都是从 0 开始的,关于 ...

  5. 【论文随笔】基于会话的推荐系统构建方法调查(Survey On Methods For Building Session-Based Recommender Systems)

    前言 今天读的论文为一篇于2023年发表在国际开放信息技术杂志(International Journal of Open Information Technologies)的论文,文章是关于构建基于 ...

  6. AI与.NET系列文章之三:在.NET中使用大语言模型(LLMs)

    引言 在技术迅猛发展的今天,大语言模型(Large Language Models, LLMs)已成为人工智能领域的核心驱动力之一.从智能对话系统到自动化内容生成,LLMs的应用正在深刻改变我们的工作 ...

  7. python 函数与方法的区别

    函数与方法的区别 并不是类中的调用都叫方法 1.函数要手动传self,方法不用传self. 2.如果是一个函数,用类名去调用,如果是一个方法,用对象去调用. class Foo(object): de ...

  8. goland无法识别包

    新建 Go 项目时,一定要通过 "File -> New -> Project..." 方式建立,千万不要通过 "File -> Open", ...

  9. php 配置Gmail 发送邮件 PHPMailer

    hotmail 获取邮箱授权码 准备 首先你应该登陆https://mail.google.com地址,注册一个Gmail邮箱,然后设置开启IMAP访问 打开设置,开启IMAP访问 获取应用专用密码 ...

  10. VTK-8.2.0源码编译和初步使用(Cmake+VS2015+Qt5.14.2)

    一.准备数据 1.首先确保已安装VS5015和Qt5.14.2 2.下载Cmake并安装:Download CMake 3.下载VTK-8.2.0源码和数据并解压:Download | VTK 二.C ...