Source code for pygeostat.datautils.labels

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''labels.py: Contains utilities for creating index columns and labels'''
__author__ = 'Tyler Acorn'
__date__ = '2015-10-08'
__version__ = '1.001'

import numpy as np


[docs] def insert_real_idx(data, num_real=0, bindex=True, real_column='Realization', bi_column='BlockIndex'): ''' This will insert realization index columns. By default it will use the griddef associated with the file. Parameters: num_real (int): If you do not have a griddef associated with the file you can tell it how many realizations there are bindex (bool): True or False for adding a block index real_column (str): Set the name of the column used for the Realizations Index bi_column (str): Set the name of the column used for the Block Index **Process** If there are already a "real_column" or "bi_column" columns it will overwrite the values in these columns If the "real_column" and "bi_column" columns aren't in the dataframe it will insert these columns at the front. .. codeauthor:: pygeostat development team 2015-09-30 ''' from ..data import DataFile # --------------- # Insert columns at front of the dataframe if they do not already exist # --------------- if real_column not in data.data.columns: data.data.insert(loc=0, column=real_column, value=0) if bindex is True: if bi_column not in data.columns and bindex is True: data.data.insert(loc=1, column=bi_column, value=0) # --------------- # Calculate Number of Realizations and the size of the realizations # --------------- if data.griddef is None: if num_real != 0: real_size = len(data.data.index) / num_real # The next step I make sure we have enough rows in our dataframe. is this necessary? elif data.griddef is not None: num_real = len(data.data.index) / data.griddef.count() real_size = data.griddef.count() else: print('ERROR: No griddef assoicated with file and num_real is still 0') temp_labels = make_labels('R', (int(num_real)), padding=(len(str(int(num_real))))) ridx = np.repeat(temp_labels, real_size) data.data[real_column] = ridx if bindex is True: temp_labels = make_labels('B', (int(real_size)), padding=(len(str(int(real_size))))) bidx = np.tile(temp_labels, num_real) data.data[bi_column] = bidx
[docs] def make_labels(prefix, num, padding=0): ''' Returns a series of lables combining a prefix and a number with leading zeros Parameters: prefix (str): any letter(s) that you want as the prefix (for example B for blockindex) num (int): The number of labels you want. padding (int): if given an integer value will pad the numbers with zeros until the prefix + the numbers equal the length of the padding value Return: Series: This will return a series with "n" number of labels starting from 1 Note: Barrowed from website http://pandas.pydata.org/pandas-docs/stable/advanced.html#advanced Examples: Creating an array of labels >>> label = gs.datautils.make_labels('R', 3, padding=3) >>> label >>> [R001, R002, R003] .. codeauthor:: pygeostat development team 2015-09-21 ''' return ["%s%s" % (prefix, str(i).zfill(padding)) for i in range(1, (num + 1))]