需求,在实际工作中,需要对比两个表格的数据,但是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