def import_mpt(self, filename, **kwargs): """ MPT DAS 1 FD importer timestep: int or :class:`datetime.datetime` if provided use this value to set the 'timestep' column of the produced dataframe. Default: 0 """ timestep = kwargs.get('timestep', None) if 'timestep' in kwargs: del (kwargs['timestep']) self.logger.info('MPT DAS-1 import') with LogDataChanges(self, filter_action='import'): data, electrodes, topography = reda_mpt.import_das1( filename, **kwargs) if timestep is not None: data['timestep'] = timestep if 'frequency' in data.columns: data = data.query('frequency == {}'.format( data.frequency.min())) data = data.drop('frequency') self._add_to_container(data) if kwargs.get('verbose', False): print('Summary:') self._describe_data(data)
def filter(self, query, inplace=True): """Use a query statement to filter data. Note that you specify the data to be removed! Parameters ---------- query : string The query string to be evaluated. Is directly provided to pandas.DataFrame.query inplace : bool if True, change the container dataframe in place (defaults to True). Otherwise, return a new ERT container which contains the filtered data. Returns ------- result : :py:class:`reda.ERT` ERT container with filtered data """ with LogDataChanges(self, filter_action='filter', filter_query=query): result = self.data.query( 'not ({0})'.format(query), inplace=inplace, ) if inplace: return self else: # create a new object of this type (e.g., ERT, IP, TDIP, ...) return self.__class__(data=result)
def import_bert(self, filename, **kwargs): """BERT .ohm file import""" timestep = kwargs.get('timestep', None) if 'timestep' in kwargs: del (kwargs['timestep']) self.logger.info('Unified data format (BERT/pyGIMLi) file import') with LogDataChanges(self, filter_action='import', filter_query=os.path.basename(filename)): data, electrodes, topography = reda_bert_import.import_ohm( filename, **kwargs) if timestep is not None: data['timestep'] = timestep self._add_to_container(data) self.electrode_positions = electrodes # See issue #22 if kwargs.get('verbose', False): print('Summary:') self._describe_data(data)
def sub_filter(self, subset, filter, inplace=True): """Apply a filter to subset of the data Examples -------- :: .subquery( 'timestep == 2', 'R > 4', ) """ # build the full query full_query = ''.join(('not (', subset, ') or not (', filter, ')')) with LogDataChanges(self, filter_action='filter', filter_query=filter): result = self.data.query(full_query, inplace=inplace) return result
def import_syscal_bin(self, filename, **kwargs): """Syscal import timestep: int or :class:`datetime.datetime` if provided use this value to set the 'timestep' column of the produced dataframe. Default: 0 """ timestep = kwargs.get('timestep', None) if 'timestep' in kwargs: del (kwargs['timestep']) self.logger.info('IRIS Syscal Pro bin import') with LogDataChanges(self, filter_action='import'): data, electrode_positions, topography = reda_syscal.import_bin( filename, **kwargs) if timestep is not None: data['timestep'] = timestep self._add_to_container(data, electrode_positions, topography) if kwargs.get('verbose', False): print('Summary:') self._describe_data(data)
def filter(self, query, inplace=True): """Use a query statement to filter data. Note that you specify the data to be removed! Parameters ---------- query : string The query string to be evaluated. Is directly provided to pandas.DataFrame.query inplace : bool if True, change the container dataframe in place (defaults to True) Returns ------- result : :py:class:`pandas.DataFrame` DataFrame that contains the result of the filter application """ with LogDataChanges(self, filter_action='filter', filter_query=query): result = self.data.query( 'not ({0})'.format(query), inplace=inplace, ) return result