.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/02_pandas_to_omf_blockmodel.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_02_pandas_to_omf_blockmodel.py: Pandas Block Model to OMF ========================= This example demonstrates how to read a block model from an OMF file, modify it using pandas, and write it back to a new OMF file. A round trip is completed to validate that the omf file stores various data types as expected. .. GENERATED FROM PYTHON SOURCE LINES 10-20 .. code-block:: Python from pathlib import Path import numpy as np import pandas as pd import omf from omf import Project from omfpandas import OMFPandasReader, OMFPandasWriter .. GENERATED FROM PYTHON SOURCE LINES 21-24 Instantiate ----------- Read the original block model from the OMF file. .. GENERATED FROM PYTHON SOURCE LINES 24-30 .. code-block:: Python test_omf_filepath: Path = Path('../assets/test_file.omf') blocks: pd.DataFrame = OMFPandasReader(filepath=test_omf_filepath).read_blockmodel(blockmodel_name='regular') blocks.head() .. raw:: html
random attr
x y z
10.5 10.5 -9.5 0.727986
-8.5 0.277389
-7.5 0.351741
-6.5 0.999272
-5.5 0.495092


.. GENERATED FROM PYTHON SOURCE LINES 31-36 Modify the BlockModel --------------------- We'll modify the block model using Pandas and write it back to another OMF file. Add a new float column to the block model. .. GENERATED FROM PYTHON SOURCE LINES 36-41 .. code-block:: Python blocks['density'] = 2.7 # set the second density record to nan blocks.iloc[1, blocks.columns.get_loc('density')] = np.nan .. GENERATED FROM PYTHON SOURCE LINES 42-43 Create an integer variable .. GENERATED FROM PYTHON SOURCE LINES 43-48 .. code-block:: Python np.random.seed(42) blocks['some_int'] = pd.Series(np.random.choice([0, 1, 2, np.nan], size=blocks.shape[0], ), dtype='Int32', index=blocks.index) .. GENERATED FROM PYTHON SOURCE LINES 49-50 Create a categorical variable .. GENERATED FROM PYTHON SOURCE LINES 50-55 .. code-block:: Python blocks['rock_class'] = np.random.choice(['A', 'B', 'C', np.nan], size=blocks.shape[0]) blocks['rock_class'] = blocks['rock_class'].astype('category') blocks.head() .. raw:: html
random attr density some_int rock_class
x y z
10.5 10.5 -9.5 0.727986 2.7 2 nan
-8.5 0.277389 NaN <NA> B
-7.5 0.351741 2.7 0 B
-6.5 0.999272 2.7 2 nan
-5.5 0.495092 2.7 2 A


.. GENERATED FROM PYTHON SOURCE LINES 56-58 .. code-block:: Python blocks.dtypes .. rst-class:: sphx-glr-script-out .. code-block:: none random attr float64 density float64 some_int Int32 rock_class category dtype: object .. GENERATED FROM PYTHON SOURCE LINES 59-61 Write to OMF ------------ .. GENERATED FROM PYTHON SOURCE LINES 61-67 .. code-block:: Python new_omf_filepath: Path = Path('modified_test_file.omf') OMFPandasWriter(filepath=new_omf_filepath).create_blockmodel(blocks=blocks, blockmodel_name='Modified Block Model', allow_overwrite=True) omfpr: OMFPandasReader = OMFPandasReader(filepath=new_omf_filepath) .. rst-class:: sphx-glr-script-out .. code-block:: none 2025-03-26 13:24:45,571 - INFO - Creating BlockModel from dataframe: Modified Block Model 2025-03-26 13:24:45,602 - INFO - Elapsed time for create_blockmodel: 0:00:00.030322 .. GENERATED FROM PYTHON SOURCE LINES 68-69 Confirm that the new variables are in the model we saved. .. GENERATED FROM PYTHON SOURCE LINES 69-73 .. code-block:: Python saved_blocks: pd.DataFrame = OMFPandasReader(filepath=new_omf_filepath).read_blockmodel( blockmodel_name='Modified Block Model') saved_blocks.head() .. raw:: html
random attr density some_int rock_class
x y z
10.5 10.5 -9.5 0.727986 2.7 2 nan
-8.5 0.277389 NaN <NA> B
-7.5 0.351741 2.7 0 B
-6.5 0.999272 2.7 2 nan
-5.5 0.495092 2.7 2 A


.. GENERATED FROM PYTHON SOURCE LINES 74-76 .. code-block:: Python saved_blocks.dtypes .. rst-class:: sphx-glr-script-out .. code-block:: none random attr float64 density float64 some_int object rock_class category dtype: object .. GENERATED FROM PYTHON SOURCE LINES 77-80 Validation ---------- Load the two omf projects and compare the attribute data for each .. GENERATED FROM PYTHON SOURCE LINES 80-91 .. code-block:: Python project_1: Project = omf.load(str(test_omf_filepath)) project_2: Project = omf.load(str(new_omf_filepath)) bm_1: omf.RegularBlockModel = [element for element in project_1.elements if element.name == 'regular'][0] bm_2: omf.RegularBlockModel = [element for element in project_2.elements if element.name == 'Modified Block Model'][0] for i, attr_1 in enumerate(bm_1.attributes): attr_2 = bm_2.attributes[i] assert np.all(attr_1.name == attr_2.name) assert np.all(attr_1.array.array == attr_2.array.array) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.074 seconds) .. _sphx_glr_download_auto_examples_02_pandas_to_omf_blockmodel.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: 02_pandas_to_omf_blockmodel.ipynb <02_pandas_to_omf_blockmodel.ipynb>` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: 02_pandas_to_omf_blockmodel.py <02_pandas_to_omf_blockmodel.py>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_