社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-openpyxl教程(五)

庄周幻梦 • 4 年前 • 522 次点击  

前文:
Python-openpyxl教程(一): 教程篇
Python-openpyxl教程(二): 简单使用篇
Python-openpyxl教程(三): openpyxl性能篇
Python-openpyxl教程(四): openpyxl优化模式篇


插入和删除行和列,移动单元格的范围

插入行和列

您可以使用相关的工作表方法插入行或列:

  • openpyxl.worksheet.worksheet.Worksheet.insert_rows()
  • openpyxl.worksheet.worksheet.Worksheet.insert_cols()
  • openpyxl.worksheet.worksheet.Worksheet.delete_rows()
  • openpyxl.worksheet.worksheet.Worksheet.delete_cols()

默认值为一行或一列。例如,在第7行(在现有第7行之前)插入一行:

ws.insert_rows(7)

删除行和列

删除列 F:H

ws.delete_cols(6, 3)

单元格的移动范围

您还可以在工作表中移动单元格范围:

ws.move_range("D4:F10",rows=-1,cols=2)

这会将范围内的单元格 D4:F10 向上移动一列,向右移动两列。单元将覆盖任何现有单元。

如果单元格包含公式,则可以让openpyxl为您翻译这些公式,但是由于并非总是您所需要的,因此默认情况下将其禁用。同样,只有单元格的公式会被翻译。从其他单元格定义的名称对单元格的引用将不会更新;您可以ishiyong 解析公式 转换器执行此操作:

ws.move_range("G40:H10",rows=1,cols=1,translate=True)

这会将公式中的相对引用在范围内移动一行一列

和Pandas&NumPy一起使用

openpyxl可以与流行的Pandas和NumPy库一起使用

NumPy支持

openpyxl内置支持NumPy类型的float,integer和Boolean, 使用Pandas的时间戳类型支持DateTimes。

使用Pandas的DataFrame

openpyxl.utils.dataframe.dataframe_to_rows() 函数提供了一种 使用Pandas DataFrane 的简单方法:

from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()
ws = wb.active

for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)

虽然Pandas本身支持向Excel的转换,但这为客户端代码提供了更多的灵活性,包括直接将 DataFrame 流传输到文件的能力。

要将 DataFrame 转换为突出显示标题和索引的工作表,请执行以下操作:

from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()
ws = wb.active

for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)
    
for cell in ws['A'] + ws[1]:
    cell.style = 'Pandas'
    
wb.save("pandas_openpyxl.xlsx")

另外,如果只想转换数据,则可以使用只写模式:

from openpyxl.cell.cell import WriteOnlyCell
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook(write_only=True)
ws = wb.create_sheet()

cell = WriteOnlyCell(ws)
cell.style = 'Pandas'

def format_first_row(row, cell):
    for c in row:
        cell.value = c
        yield cell
        
rows =dataframe_to_rows(df)
first_row = format_first_row(next(rows),cell)
ws.append(first_row)

for row in rows:
    row = list(row)
    cell.value = row[0]
    row[0] = cell
    ws.append(row)

wb.save("openpyxl_stream.xlsx")

此代码将与标准工作簿一起使用。

将工作表转换为DataFrame

要将工作表转换为DataFrame,可以使用 values 属性。如果工作表没有标题或索引,这将非常容易:


df = DataFrame(ws.values)

如果工作表确实具有标题或索引,例如Pandas创建的标题或索引,则需要做更多的工作:

from itertools import islice
from openpyxl import Workbook


wb = Workbook()
ws = wb.create_sheet()

data = ws.values
cols = next(data)[1:]
data = list(data)
idx = [r[0] for r in data]
data = (islice(r, 1, None) for r in data)
df = DataFrame(data, index=idx, columns=cols)

注: DataFrame是什么?
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引,它可以被看作由series组成的字典(公用一个索引)


来源:

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110841
 
522 次点击