Source code for pygeopressure.basic.well_storage

# -*- coding: utf-8 -*-
"""
an interface to a hdf5 storage file

Created on Thu May 10 2018
"""
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

__author__ = "yuhao"

import pandas as pd


[docs]class WellStorage(object): """ interface to hdf5 file storing well logs this class is designed to accept only LasData.data_frame as input data """ def __init__(self, hdf5_file=None): self.hdf5_file = hdf5_file @property def wells(self): well_names = None with pd.HDFStore(self.hdf5_file) as store: well_names = [key[1:] for key in store.keys()] return well_names
[docs] def get_well_data(self, well_name): try: with pd.HDFStore(self.hdf5_file) as store: return store[well_name] except KeyError: raise KeyError("No well named {}".format(well_name))
[docs] def remove_well(self, well_name): try: with pd.HDFStore(self.hdf5_file) as store: return store.remove(well_name) except KeyError: raise KeyError("No well named {}".format(well_name))
[docs] def add_well(self, well_name, well_data_frame): well_name = well_name.lower().replace('-', '_') well_data_frame.to_hdf(self.hdf5_file, well_name)
[docs] def update_well(self, well_name, well_data_frame): with pd.HDFStore(self.hdf5_file) as store: store[well_name.lower().replace('-', '_')] = well_data_frame
[docs] def logs_into_well(self, well_name, logs_data_frame): well_name = well_name.lower().replace('-', '_') well_df = self.get_well_data(well_name) logs_in_wells = well_df.columns.tolist() logs_to_add = logs_data_frame.columns.tolist() duplicate_columns = list(set(logs_in_wells).intersection(logs_to_add)) duplicate_columns.remove("Depth(m)") if not duplicate_columns: new_df = well_df.join( logs_data_frame.set_index("Depth(m)"), on="Depth(m)") self.remove_well(well_name) self.add_well(well_name, new_df) else: raise ValueError("Duplicate logs: {}".format(duplicate_columns))