Source code for plateo.exporters.plate_to_tables

from collections import defaultdict
import pandas

from ..tools import unit_factors
from ..containers.helper_functions import number_to_rowname


[docs] def plate_to_platemap_spreadsheet( plate, wellinfo_function, filepath=None, sheet_name="plate_map", headers=True ): """Generate a spreadsheet with a map of the plate. Parameters ---------- plate A Plate object filepath Path to a ".csv" or ".xls(x)" file. Or a Pandas ExcelWriter object. wellinfo_function A function `f(well) -> info` where `well` is a Well object of the plate and the returned `info` is an information about the well that will be displayed in the well's cell in the final spreadsheet. The info can be a string or any other object that can be converted to a string .. code:: bash 1 2 3 4 5 6 7 8 9 10 11 12 A . . . . . . . . . . . . B . . . . . . . . . . . . C . . . . . . . . . . . . D . . . . . . . . . . . . E . . . . . . . . . . . . F . . . . . . . . . . . . G . . . . . . . . . . . . H . . . . . . . . . . . . """ platedict = defaultdict(lambda *a: {}) for well in plate: info = wellinfo_function(well) platedict[well.column][number_to_rowname(well.row)] = info dataframe = pandas.DataFrame.from_dict(platedict) if filepath is None: return dataframe elif str(filepath).lower().endswith(".csv"): dataframe.to_csv(filepath, header=headers, index=headers) else: dataframe.to_excel( filepath, sheet_name=sheet_name, header=headers, index=headers )
[docs] def plate_to_pandas_dataframe(plate, fields=None, direction="row"): """Return a dataframe with the info on each well""" dataframe = pandas.DataFrame.from_records(plate.to_dict()["wells"]).T by = ["row", "column"] if direction == "row" else ["column", "row"] dataframe = dataframe.sort_values(by=by) if fields is not None: dataframe = dataframe[fields] return dataframe
def plate_to_content_spreadsheet( plate, filepath, content_type=None, volume_unit="uL", concentration_unit="ng-uL" ): """Write plate into Excel with 'content', 'volume', 'concentration' sheets. The 'content' sheet will contain a platemap of the product contained in each well (e.g. a part name or a strain name) The 'volume' sheet will contain a platemap of the volume contained in each well (e.g. a part name or a strain name) in liter The 'concentration' sheet will contain a platemap of the concentration contained in each well (e.g. a part name or a strain name) in gram/liter. Parameters ---------- plate Plate to be written. The content of each well must have a single product. filepath Path to the excel spreadsheet to write. An Excel writer also works. """ volume_factor = unit_factors[volume_unit] c_mass, c_vol = concentration_unit.split("-") concentration_factor = unit_factors[c_mass] / unit_factors[c_vol] functions = [ ( ("content (%s)" % content_type) if content_type else "content", lambda w: w.content.components_as_string(), ), ("volume (%s)" % volume_unit, lambda w: w.content.volume / volume_factor), ( "concentration (%s)" % concentration_unit, lambda w: w.content.concentration() / concentration_factor, ), ] writer = pandas.ExcelWriter(filepath) for name, fun in functions: plate_to_platemap_spreadsheet(plate, fun, sheet_name=name, filepath=writer) writer.close()