diff --git a/src/caosadvancedtools/table_converter.py b/src/caosadvancedtools/table_converter.py index 7ec5d4ffa6a14ecc8dfed52957a6df10e1423137..54b25185db948bcd4a3a92b488919e4bfe7c4920 100644 --- a/src/caosadvancedtools/table_converter.py +++ b/src/caosadvancedtools/table_converter.py @@ -25,6 +25,7 @@ import re import sys import caosdb as db +import numpy as np import pandas as pd @@ -64,9 +65,14 @@ def to_table(container): if set([p.name for p in rec.parents]) != rts: raise ValueError("Parents differ") - for p in rec.get_properties(): - - df.at[ii, generate_property_name(p)] = p.value + for prop in rec.get_properties(): + propname = generate_property_name(prop) + if isinstance(prop.value, list): + if propname not in df: + df[propname] = pd.Series(dtype=object) + elif df[propname].dtype != np.dtypes.ObjectDType: + df[propname] = df[propname].astype(object) + df.at[ii, propname] = prop.value return df diff --git a/unittests/test_table_converter.py b/unittests/test_table_converter.py index 6a3b0dda45abab28198f29a5b013f25cd0920524..460f88af312048fffd20d6ada9afaa2b44b532d6 100644 --- a/unittests/test_table_converter.py +++ b/unittests/test_table_converter.py @@ -69,10 +69,14 @@ class TableTest(unittest.TestCase): r1 = db.Record() r1.add_parent("no1") r1.add_property("p1") + r1.add_property("p3", value=23) + r1.add_property("p4", value=[1]) r2 = db.Record() r2.add_parent("no1") r2.add_property("p1") - r2.add_property("p2", value=[1, 2]) + r2.add_property("p2", value=[20, 21]) + r2.add_property("p3", value=[30, 31]) + r2.add_property("p4", value=[40.0, 41.0]) c = db.Container() c.extend([r1, r2]) to_table(c)