首页 > 编程语言 >python结合pandas把excel列转行

python结合pandas把excel列转行

时间:2023-04-23 19:41:04浏览次数:38  
标签:index python excel df pd path pandas

需求,在实际工作中,需要对比两个表格的数据,但是A表格的行和B表格的列做对比,但是由于环境的限制,不能用sql去进行列转行操作,就利用pandas进行一个简单的列转行(没有复合表头)。这种没有多个sheet情况,多个sheet的情况需要切换到需要的sheet内。

首先下载 pandas, pip install pandas 

然后下载openpyxl, pip install openpyxl

第一步操作:

读取B表的列,核心代码如下 

import pandas as pd

df = pd.read_excel('B.xlsx')

#获取列名的所有值,转化为列表的形式

column = df['列名'].values.tolist()


第二步操作:

import pandas as pd 

df = pd.read_excel('A.xlsx')

#iloc是获取行的值,重新赋值,在要对比的行上下插入一个空白行,把空白行的数据替换成列的数据

df.iloc[index] = ['这个列表是读取的列值']

#重新写入表格内 

df.to_excel('A.xlsx',index=False)

完整代码:

import pandas as pd
import os


def getColumnInfo():
    pwd = input('请输入读取路径,\用请替换成/')
    os.chdir(pwd)
    path = input('请输入读取文件名称\n')
    df = pd.read_excel(path)
    column_name = input('请输入列名\n')
    column = df[column_name].values.tolist()
    return column


def setRowValue():
    pwd_w = input('请输入要写入路径,\用请替换成/')
    os.chdir(pwd_w)
    path_1 = input('请输入要写入文件名称\n')
    index = int(input('请输入要替换的下标,第一行是从0开始\n'))
    df = pd.read_excel(path_1)
    if df.shape[0] >= 1:
        df.iloc[index] = getColumnInfo()
        os.chdir(pwd_w)
        df.to_excel(path_1, index=False)
    else:
        # 获取表头
        # header = df.keys().values.tolist()
        # wb = Workbook()
        # sheet = wb.active
        # sheet.append(header)
        # sheet.append(getColumnInfo())
        # wb.save(path_1)
        # wb.close()

        '''
        方法二 不改变原值追加
        '''
        header = df.keys().values.tolist()
        # 获取原来的表格内容,转化为DataFrame格式
        df_1 = pd.DataFrame([getColumnInfo()], columns=header)
        # 拼接表格,把所有的内容搞到一起
        df_all = pd.concat([df, df_1], ignore_index=False)
        os.chdir(pwd_w)
        df_all.to_excel(path_1, index=False)

标签:index,python,excel,df,pd,path,pandas
From: https://blog.51cto.com/u_12304886/6218456

相关文章

  • Leetcode 88. 合并两个有序数组 Python题解
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/merge-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。1.暴力法解题思路:由于题目要求原地合并,直接返回nums1数组。因此一个可行的方案是合并两个列表,然后对合并后的列表进行排序。用......
  • python解释器中ctrl+D和ctrl+Z有什么不同
    在Python解释器中,`Ctrl+D`和`Ctrl+Z`都可以用于退出解释器,但是它们的行为略有不同。`Ctrl+D`在Unix/Linux系统中被称为EOF(EndOfFile),表示输入结束。在Python解释器中,当输入`Ctrl+D`时,解释器会将当前输入的内容作为一个完整的语句执行,并退出解释器。`Ctrl+Z`在Wi......
  • Leetcode 53. 最大子数组和 Python题解
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/maximum-subarray著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。1.动态规划解题思路:对于当前元素nums[i]来说,最大的连续子数组可以为:nums[0:i]中的最大连续子数组加上nums[i]nums[i],此时nums[......
  • Python常见的10个安全漏洞及修复方法
    关注我了解更多Python技术知识,带你一路“狂飙”到底!上岸大厂不是梦!编写安全的代码很困难,当你学习一门编程语言、一个模块或框架时,你会学习其使用方法。在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例。然而,许多Python开发人员......
  • Leetcode 1.两数之和 Python题解
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/two-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。1.暴力遍历法解题思路:遍历数组,对于当前的元素nums[i],如果result=taget-nums[i]在数组中,则返回这nums[i]和result的下标。如果已经查......
  • python + informix+基本语句
    importjaydebeapiimportosimportloggingimporttimeclassPostgre_Person:def__init__(self):#打开数据库连接foriinrange(10):try:url=###user=###password=##......
  • 1 python操作哨兵 、2 python操作集群、3 缓存优化、4 mysql 主从 、5 django使用多数
    目录1python操作哨兵2python操作集群3缓存优化3.1redis缓存更新策略3.2缓存击穿,雪崩,穿透4mysql主从5django使用多数据库做读写分离1python操作哨兵#高可用架构后---》不能直接连某一个主库了---》主库可能会挂掉,后来它就不是主库了#之前学的连接redis的操作,就用不......
  • python 连接xiformix数据库
    importjaydebeapiforiinrange(10):try:url=######user=#####password=#####dirver='com.informix.jdbc.IfxDriver'jarFile="D:\\i......
  • 盘点一款Python发包收包利器——scapy
    今日鸡汤潮平两岸阔,风正一帆悬。    大家好,我是黄伟。今天跟大家讲的是Python用于发送接受网络数据包的模块-------scapy。前言众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程,这里就显示了很多数据包的发送接收数据。那么,什么是包......
  • 说说Python集合的那些事儿
    大家好,我是IT共享者,人称皮皮。今天给大家来捋一捋Python集合。一、什么是集合?集合(set)和字典(dict)类似,它是一组key的集合,但不存储value。集合的特性就是:key不能重复。二、集合常用操作1.创建集合set的创建可以使用{}也可以使用set函数:s1={'a','b','c','a','d','b'}......