Hướng dẫn pandas to excel formatting openpyxl - gấu trúc sang định dạng excel openpyxl

Hướng dẫn pandas to excel formatting openpyxl - gấu trúc sang định dạng excel openpyxl

Khi tôi muốn lưu trạng thái hiện tại của GANDAS DATAFRAME cho tiêu thụ thủ công trên mạng, tôi thường viết df.to_excel('foo.xlsx') trong phiên ipython hoặc sổ ghi chép Jupyter của mình. Tuy nhiên, kiểu mặc định trông không đẹp và thường cần điều chỉnh thủ công (ví dụ: chiều rộng cột) để có thể sử dụng được.

Nếu bạn muốn tạo các báo cáo tùy chỉnh từ gấu trúc, do đó bạn có thể muốn theo chương trình kiểu này. Gói openpyxl thực hiện công việc này độc đáo. Dưới đây là một ví dụ động lực cho bạn thấy những cách cơ bản của API. Đầu tiên, có một số dữ liệu ngẫu nhiên:

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO("""\
               alpha      beta     gamma
2000-01-01 -0.173215  0.119209 -1.044236
2000-01-02 -0.861849 -2.104569 -0.494929
2000-01-03  1.071804  0.721555 -0.706771
2000-01-04 -1.039575  0.271860 -0.424972
2000-01-05  0.567020  0.276232 -1.087401
2000-01-06 -0.673690  0.113648 -1.478427
2000-01-07  0.524988  0.404705  0.577046
2000-01-08 -1.715002 -1.039268 -0.370647
"""), sep="\s+", parse_dates=True)

output_filename = 'pandas-to-excel.xlsx'

Không tùy chỉnh

Chỉ để so sánh, xuất bản đơn giản của DataFrame sang bảng tính đầu tiên:

sheet_name = 'No customization'
df.to_excel(output_filename, sheet_name)

Ít tùy chỉnh

Vì cột đầu tiên không thể đọc được với chiều rộng cột mặc định, chúng tôi tăng nhẹ. Đơn vị tương ứng với đơn vị chiều rộng cột Excel. Trên máy của tôi, bảng tính kết quả có chiều rộng cột là 20,29

with pd.ExcelWriter(
        output_filename,
        mode='a',  # append; default='w' (overwrite)
        engine='openpyxl') as xlsx:
    sheet_name = 'Little customization'
    df.to_excel(xlsx, sheet_name)
    
    # set index column width
    ws = xlsx.sheets[sheet_name]
    ws.column_dimensions['A'].width = 21

Tùy chỉnh đầy đủ

Ví dụ động lực về những gì bạn có thể làm với một số thông số kỹ thuật khác, cụ thể là:

  • Định dạng có điều kiện, ở đây với thang màu tùy chỉnh sử dụng phần trăm cho giới hạn dưới và trên (10%-90%), trong khi điểm giữa được xác định bởi giá trị (0 là màu trắng). Các biểu tượng và thanh màu là cũng có thể, tất nhiên.
  • Định dạng số, sử dụng cùng một cú pháp như trong đối thoại thuộc tính tế bào Excel. Tại đây, ngày chỉ số Cột Lốc bao gồm tên tuần được rút ngắn (MO-SU).
  • Áp dụng một kiểu được xây dựng được đặt tên theo tên (tiêu đề 2) cho hàng tiêu đề.
  • Tạo và áp dụng một kiểu tùy chỉnh được đặt tên (kiểu chỉ mục) bao gồm định dạng số, phông chữ và căn chỉnh.

Đầu tiên, các định nghĩa nhập khẩu và quy tắc/kiểu:

from openpyxl.formatting.rule import ColorScaleRule
from openpyxl.styles import Alignment, Font, NamedStyle
from openpyxl.utils import get_column_letter

percentile_rule = ColorScaleRule(
    start_type='percentile',
    start_value=10,
    start_color='ffaaaa',  # red-ish
    mid_type='num',
    mid_value=0,
    mid_color='ffffff',  # white
    end_type='percentile',
    end_value=90,
    end_color='aaffaa')  # green-ish
    
# custom named style for the index
index_style = NamedStyle(
    name="Index Style",
    number_format='YYYY-MM-DD, DDD',
    font=Font(color='999999', italic=True),
    alignment=Alignment(horizontal='left'))

# pass keyword args as dictionary
writer_args = {
    'path': output_filename,
    'mode': 'a',
    'engine': 'openpyxl'}

Cùng với đó, văn bản thực tế trông như thế này:

with pd.ExcelWriter(**writer_args) as xlsx:
    sheet_name = 'Full customization'
    df.to_excel(xlsx, sheet_name)
    ws = xlsx.sheets[sheet_name]
    
    # cell ranges
    index_column = 'A'
    value_cells = 'B2:{col}{row}'.format(
        col=get_column_letter(ws.max_column),
        row=ws.max_row)
    title_row = '1'

    # index column width
    ws.column_dimensions[index_column].width = 21

    # color all value cells
    ws.conditional_formatting.add(value_cells, 
                                  percentile_rule)
    
    # for general styling, one has to iterate over
    # all cells individually
    for row in ws[value_cells]:
        for cell in row:
            cell.number_format = '0.00'
    
    # builtin or named styles can be applied by using
    # the style object or their name (shown below)
    for cell in ws[index_column]:
        cell.style = index_style
    
    # style title row last, so that headline style
    # wins over index style in top-left cell A1
    for cell in ws[title_row]:
        cell.style = 'Headline 2'

Nếu bạn muốn ở trên trong một tập lệnh, hãy thử gist pandas-to-excel.py của tôi. Nó tạo ra một tệp excel duy nhất với ba bảng tính được đặt tên phù hợp.

bài chuyển hướng

Tôi có thể sử dụng openpyxl và gấu trúc với nhau không?

Tải dữ liệu Excel với OpenPyXL và chuyển đổi thành DataFrame. DataFrame được sử dụng để biểu diễn dữ liệu 2D trên gấu trúc. Vì dữ liệu Excel cũng là dữ liệu 2D được biểu thị bằng các hàng và cột, đối tượng bảng tính trong [openpyxl] (https://openpyxl.readthedocs.io/en/stable/index.html) có thể được chuyển đổi thành đối tượng DataFrame Pandas.Worksheet object in [openpyxl] (https://openpyxl.readthedocs.io/en/stable/index.html) can be converted to Pandas DataFrame object.

Làm cách nào để thay đổi định dạng ô trong openpyxl?

Chúng ta hãy xem chương trình sau:..
nhập openpyxl ..
WB = OpenPyxl.load_workbook ('Marks. xlsx').
Tờ = WB.tích cực..
Tế bào = tấm ['A1', 'B7'].
# Các tế bào hoạt động như toán tử phạm vi ..
Đối với I1, I2 trong các tế bào:.
print ("{0: 8} {1: 8}". định dạng (i1. value, i2. value)).

Cái gấu trúc nào tốt hơn hoặc openpyxl?

Theo cộng đồng Stackshare, Pandas có sự chấp thuận rộng hơn, được đề cập trong 41 Stacks & 83 nhà phát triển của công ty;So với OpenPyXL, được liệt kê trong 7 ngăn xếp công ty và 7 ngăn xếp nhà phát triển.pandas has a broader approval, being mentioned in 41 company stacks & 83 developers stacks; compared to openpyxl, which is listed in 7 company stacks and 7 developer stacks.

OpenPyxl có thể viết các tệp XLS không?

OpenPyXL là thư viện Python để đọc và ghi các tệp XLSX/XLSM/XLSM/XLTX/XLTM Excel 2010..