Create Excel spreadsheets with formulas using a DataFrame-like API
Project description
Excelify: Create Excel spreadsheets using DataFrame-like API
Excelify is a DataFrame-like library that lets users create Excel spreadsheets.
To learn more, read Getting Started. TODO: Add a link.
Demo
(Click the image above to go to a demo video.)
Example
We'll create a table that demonstrates compounded interest.
We first define an "emtpy table" using el.ExcelFrame:
import excelify as el
df = el.ExcelFrame.empty(
columns=["year", "boy_amount", "annual_return", "eoy_amount"],
height=3,
)
Printing df will show the following:
>>> df
shape: (3, 4)
+---+----------+----------------+-------------------+----------------+
| | year (A) | boy_amount (B) | annual_return (C) | eoy_amount (D) |
+---+----------+----------------+-------------------+----------------+
| 1 | | | | |
| 2 | | | | |
| 3 | | | | |
+---+----------+----------------+-------------------+----------------+
The letters A, B, C, D,... in each column after the column name represents the column index, similar to Excel.
Excelify has a Polars-like API that lets you define the formula for all the
cells in a given column. For example, we can define static integer value
representing the number of years elapsed using el.lit():
df = df.with_columns(
el.lit([i for i in range(3)]).alias("year"),
)
However, unlike DataFrame, you can define a formula that'll be evaluated lazily, just like Excel spreadsheets.
For example, suppose you'd like to define annual return to be 10% every year.
You can either use above el.lit function, or you can define a static value on
the first row cell and make subsequent rows refer to the previous row's value
using el.map and el.col().prev(1):
def annual_return_formula(idx: int):
if idx == 0:
return 0.10
else:
return el.col("annual_return").prev(1)
df = df.with_columns(
el.map(annual_return_formula).alias("annual_return")
)
This way, you can edit only the first row cell of annual_return to change the
annual return value for all the years.
Similarly, you can define the amount of money in the beginning and end of the year as follows:
df = df.with_columns(
el.map(
# You can also use lambda expression to make it more concise.
lambda idx: 100.0
if idx == 0
else el.col("eoy_amount").prev(1)
).alias("boy_amount"),
(el.col("boy_amount") * (1.0 + el.col("annual_return"))).alias("eoy_amount"),
)
If you print df, you'll get the following:
>>> print(df)
shape: (3, 4)
+---+----------+----------------+-------------------+-------------------+
| | year (A) | boy_amount (B) | annual_return (C) | eoy_amount (D) |
+---+----------+----------------+-------------------+-------------------+
| 1 | 0.00 | 100.00 | 0.10 | (B1 * (1.0 + C1)) |
| 2 | 1.00 | D1 | C1 | (B2 * (1.0 + C2)) |
| 3 | 2.00 | D2 | C2 | (B3 * (1.0 + C3)) |
+---+----------+----------------+-------------------+-------------------+
Unlike DataFrame, ExcelFrame stores the formula of the cell by default. To see
numerical values, you can call df.evaluate() - it'll return a new ExcelFrame
where each cell will store the computed value of the formula in df:
>>> print(df.evaluate())
shape: (3, 4)
+---+----------+----------------+-------------------+----------------+
| | year (A) | boy_amount (B) | annual_return (C) | eoy_amount (D) |
+---+----------+----------------+-------------------+----------------+
| 1 | 0.00 | 100.00 | 0.10 | 110.00 |
| 2 | 1.00 | 110.00 | 0.10 | 121.00 |
| 3 | 2.00 | 121.00 | 0.10 | 133.10 |
+---+----------+----------------+-------------------+----------------+
To export the ExcelFrame to excel, simply call df.to_excel().
Excelify-Viewer
To run excelify-viewer locally, you can run
excelify-viewer --file-path $FILE_NAME
where FILE_NAME points to the python script that constructs the table.
The script must end with excelify.display. See files in examples/ directory
to see sample scripts.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file excelify_lib-0.1.0.tar.gz.
File metadata
- Download URL: excelify_lib-0.1.0.tar.gz
- Upload date:
- Size: 22.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a66ba9706f804a0c9bacaf72ed0767ddeb02e62977d4041c6963f814c825674
|
|
| MD5 |
610b945ba1cd5938f841f30ad24274ac
|
|
| BLAKE2b-256 |
166a65f12bc8a43259c4cae673027b8e4fc2b5628b3a136f77bf7694c03ec3fd
|
File details
Details for the file excelify_lib-0.1.0-py3-none-any.whl.
File metadata
- Download URL: excelify_lib-0.1.0-py3-none-any.whl
- Upload date:
- Size: 137.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
faf9aa1047be918334e12acefa98d9ce6b348cd8736a95be20b67f60784de009
|
|
| MD5 |
dca8e5a6769cf817723c3d0bd023b9d1
|
|
| BLAKE2b-256 |
ee6d5a5a3492a3ec7fb49ce1aa91018a95916eeaaf8176cad6c64f51a3e7bd2c
|