From 45b2949df1fd85e97be704d21cb131fd26daad15 Mon Sep 17 00:00:00 2001 From: Greg Caporaso Date: Tue, 28 Aug 2018 16:34:22 -0700 Subject: [PATCH] IMP: AlphaDiversityFormat to Metadata transformer supports multi-column (#193) --- q2_types/sample_data/_transformer.py | 20 ++++++++++++++----- .../sample_data/tests/test_transformer.py | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/q2_types/sample_data/_transformer.py b/q2_types/sample_data/_transformer.py index f5868d15..df0207f7 100644 --- a/q2_types/sample_data/_transformer.py +++ b/q2_types/sample_data/_transformer.py @@ -7,6 +7,7 @@ # ---------------------------------------------------------------------------- import pandas as pd +import numpy as np import qiime2 @@ -20,7 +21,11 @@ def _read_alpha_diversity(fh): df = pd.read_csv(fh, sep='\t', header=0, dtype=object) df.set_index(df.columns[0], drop=True, append=False, inplace=True) df.index.name = None - return pd.to_numeric(df.iloc[:, 0], errors='raise') + # casting of columns adapted from SO post: + # https://stackoverflow.com/a/36814203/3424666 + cols = df.columns + df[cols] = df[cols].apply(pd.to_numeric, errors='ignore') + return df @plugin.register_transformer @@ -34,12 +39,17 @@ def _1(data: pd.Series) -> AlphaDiversityFormat: @plugin.register_transformer def _2(ff: AlphaDiversityFormat) -> pd.Series: with ff.open() as fh: - return _read_alpha_diversity(fh) + df = _read_alpha_diversity(fh) + series = df.iloc[:, 0] + if not np.issubdtype(series, np.number): + raise ValueError('Non-numeric values detected in alpha diversity ' + 'estimates.') + return series @plugin.register_transformer def _3(ff: AlphaDiversityFormat) -> qiime2.Metadata: with ff.open() as fh: - series = _read_alpha_diversity(fh) - series.index.name = 'Sample ID' - return qiime2.Metadata(series.to_frame()) + df = _read_alpha_diversity(fh) + df.index.name = 'Sample ID' + return qiime2.Metadata(df) diff --git a/q2_types/sample_data/tests/test_transformer.py b/q2_types/sample_data/tests/test_transformer.py index d6d8b3ee..5e6d5d22 100644 --- a/q2_types/sample_data/tests/test_transformer.py +++ b/q2_types/sample_data/tests/test_transformer.py @@ -72,7 +72,7 @@ def test_alpha_diversity_format_to_metadata(self): def test_non_alpha_diversity(self): filename = 'also-not-alpha-diversity.tsv' - with self.assertRaisesRegex(ValueError, 'Unable to parse string'): + with self.assertRaisesRegex(ValueError, 'Non-numeric values '): self.transform_format(AlphaDiversityFormat, pd.Series, filename)