Source code for pycif.plugins.obsparsers.icos.utils
# -*- coding: utf-8 -*-
import os
import pandas as pd
import numpy as np
from dateutil.tz import tzoffset
[docs]
def convert_unit(df, params, unit="ppm", default_unit="ppm"):
"""Converts between ppb, ppm, ppt. Default is conversion to ppm
"""
if "unit" in df.columns:
for p in params:
# Change missing unit to default unit
df.loc[df["unit"] == "", "unit"] = default_unit
# First conversion to ppm as a common reference unit
df.loc[df["unit"] == "ppt", p] /= 1e6
df.loc[df["unit"] == "ppb", p] /= 1e3
df.loc[df["unit"] == "ppbv", p] /= 1e3
df.loc[df["unit"] == "nmol.mol-1", p] /= 1e3
df.loc[df["unit"] == "nmol.mol-¹", p] /= 1e3
# Then conversion to target unit if needed
if unit in ["ppb", "ppbv", "nmol.mol-1", "nmol.mol-¹"]:
df[p] *= 1e3
elif unit == "ppt":
df[p] *= 1e6
elif unit in ["ppm", "umol.mol-1", "umol.mol-¹"]:
pass
else:
raise ValueError(unit + " is not a valid unit for conversion")
df["unit"] = unit
return df