pyrolite.geochem.transform
Functions for converting, transforming and parameterizing geochemical data.
- pyrolite.geochem.transform.to_molecular(df: DataFrame, renorm=True)[source]
Converts mass quantities to molar quantities of the same order.
- Parameters
df (
pandas.DataFrame
) – Dataframe to transform.renorm (
bool
,True
) – Whether to renormalise the dataframe after converting to relative moles.- Returns
Transformed dataframe.
- Return type
Notes
Does not convert units (i.e. mass% –> mol%; mass-ppm –> mol-ppm).
- pyrolite.geochem.transform.to_weight(df: DataFrame, renorm=True)[source]
Converts molar quantities to mass quantities of the same order.
- Parameters
df (
pandas.DataFrame
) – Dataframe to transform.renorm (
bool
,True
) – Whether to renormalise the dataframe after converting to relative moles.- Returns
Transformed dataframe.
- Return type
Notes
Does not convert units (i.e. mol% –> mass%; mol-ppm –> mass-ppm).
- pyrolite.geochem.transform.devolatilise(df: DataFrame, exclude=['H2O', 'H2O_PLUS', 'H2O_MINUS', 'CO2', 'LOI'], renorm=True)[source]
Recalculates components after exclusion of volatile phases (e.g. H2O, CO2).
- Parameters
df (
pandas.DataFrame
) – Dataframe to devolatilise.exclude (
list
) – Components to exclude from the dataset.renorm (
bool
,True
) – Whether to renormalise the dataframe after devolatilisation.- Returns
Transformed dataframe.
- Return type
- pyrolite.geochem.transform.oxide_conversion(oxin, oxout, molecular=False)[source]
Factory function to generate a function to convert oxide components between two elemental oxides, for use in redox recalculations.
- pyrolite.geochem.transform.elemental_sum(df: DataFrame, component=None, to=None, total_suffix='T', logdata=False, molecular=False)[source]
Sums abundance for a cation to a single series, starting from a dataframe containing multiple componnents with a single set of units.
- Parameters
df (
pandas.DataFrame
) – DataFrame for which to aggregate cation data.component (
str
) – Component indicating which element to aggregate.to (
str
) – Component to cast the output as.logdata (
bool
,False
) – Whether data has been log transformed.molecular (
bool
,False
) – Whether to perform a sum of molecular data.- Returns
Series with cation aggregated.
- Return type
- pyrolite.geochem.transform.aggregate_element(df: DataFrame, to, total_suffix='T', logdata=False, renorm=False, molecular=False)[source]
Aggregates cation information from oxide and elemental components to either a single species or a designated mixture of species.
- Parameters
df (
pandas.DataFrame
) – DataFrame for which to aggregate cation data.to (
str
|Element
|Formula
|dict
) – Component(s) to convert to. If one component is specified, the element will be converted to the target species.If more than one component is specified with proportions in a dictionary (e.g.
{'FeO': 0.9, 'Fe2O3': 0.1}
), the components will be split as a fraction of the elemental sum.renorm (
bool
,True
) – Whether to renormalise the dataframe after recalculation.total_suffix (
str
, ‘T’) – Suffix of ‘total’ variables. E.g. ‘T’ for FeOT, Fe2O3T.logdata (
bool
,False
) – Whether the data has been log transformed.molecular (
bool
,False
) – Whether to perform a sum of molecular data.Notes
This won’t convert units, so need to start from single set of units.
- Returns
Dataframe with cation aggregated to the desired species.
- Return type
- pyrolite.geochem.transform.get_ratio(df: DataFrame, ratio: str, alias: Optional[str] = None, norm_to=None, molecular=False)[source]
Get a ratio of components A and B, given in the form of string ‘A/B’. Returned series be assigned an alias name.
- Parameters
df (
pandas.DataFrame
) – Dataframe to append ratio to.ratio (
str
) – String decription of ratio in the form A/B[_n].alias (
str
) – Alternate name for ratio to be used as column name.norm_to (
str
|pyrolite.geochem.norm.Composition
, None) – Reference composition to normalise to.molecular (
bool
,False
) – Flag that data is in molecular units, rather than weight units.- Returns
Dataframe with ratio appended.
- Return type
Todo
Use elemental sum from reference compositions
Use sympy-like functionality to accept arbitrary input for calculation
e.g.
"MgNo = Mg / (Mg + Fe)"
See also
- pyrolite.geochem.transform.add_MgNo(df: DataFrame, molecular=False, use_total_approx=False, approx_Fe203_frac=0.1, name='Mg#')[source]
Append the magnesium number to a dataframe.
- Parameters
df (
pandas.DataFrame
) – Input dataframe.molecular (
bool
,False
) – Whether the input data is molecular.use_total_approx (
bool
,False
) – Whether to use an approximate calculation using total iron rather than just FeO.approx_Fe203_frac (
float
) – Fraction of iron which is oxidised, used in approximation mentioned above.name (
str
) – Name to use for the Mg Number column.- Returns
Dataframe with ratio appended.
- Return type
See also
- pyrolite.geochem.transform.lambda_lnREE(df, norm_to='ChondriteREE_ON', exclude=['Pm', 'Eu'], params=None, degree=4, scale='ppm', allow_missing=True, min_elements=7, algorithm='ONeill', sigmas=None, **kwargs)[source]
Calculates orthogonal polynomial coefficients (lambdas) for a given set of REE data, normalised to a specific composition 1. Lambda coefficeints are given for the polynomial regression of ln(REE/NORM) vs radii.
- Parameters
df (
pandas.DataFrame
) – Dataframe to calculate lambda coefficients for.norm_to (
str
|Composition
|numpy.ndarray
) – Which reservoir to normalise REE data to (defaults to"ChondriteREE_ON"
).exclude (
list
,["Pm", "Eu"]
) – Which REE elements to exclude from the fit. May wish to include Ce for minerals in which Ce anomalies are common.params (
list
|str
,None
) – Pre-computed parameters for the orthogonal polynomials (a list of tuples). Optionally specified, otherwise defaults the parameterisation as in O’Neill (2016). If a string is supplied,"O'Neill (2016)"
or similar will give the original defaults, while"full"
will use all of the REE (including Eu) as a basis for the orthogonal polynomials.degree (
int
, 4) – Maximum degree polynomial fit component to include.scale (
str
) – Current units for the REE data, used to scale the reference dataset.allow_missing (
True
) – Whether to calculate lambdas for rows which might be missing values.min_elements (
int
) – Minimum columns present to return lambda values.algorithm (
str
) – Algorithm to use for fitting the orthogonal polynomials.sigmas (
float
|numpy.ndarray
|pandas.Series
) – Value or 1D array of fractional REE uncertaintes (i.e. \(\sigma_{REE}/REE\)).Todo
Operate only on valid rows.
Add residuals, Eu, Ce anomalies as options.
References
- 1
O’Neill HSC (2016) The Smoothness and Shapes of Chondrite-normalized Rare Earth Element Patterns in Basalts. J Petrology 57:1463–1508. doi: 10.1093/petrology/egw047
See also
get_ionic_radii()
,calc_lambdas()
,orthogonal_polynomial_constants()
,REE_radii_plot()
- pyrolite.geochem.transform.convert_chemistry(input_df, to=[], total_suffix='T', renorm=False, molecular=False, logdata=False, **kwargs)[source]
Attempts to convert a dataframe with one set of components to another.
- Parameters
input_df (
pandas.DataFrame
) – Dataframe to convert.to (
list
) – Set of columns to try to extract from the dataframe.Can also include a dictionary for iron speciation. See
aggregate_element()
.total_suffix (
str
, ‘T’) – Suffix of ‘total’ variables. E.g. ‘T’ for FeOT, Fe2O3T.renorm (
bool
,False
) – Whether to renormalise the data after transformation.molecular (
bool
,False
) – Flag that data is in molecular units, rather than weight units.logdata (
bool
,False
) – Whether chemical data has been log transformed. Necessary for aggregation functions.- Returns
Dataframe with converted chemistry.
- Return type
Todo
Check for conflicts between oxides and elements
Aggregator for ratios
Implement generalised redox transformation.
Add check for dicitonary components (e.g. Fe) in tests