Skip to content

Commit 8b2a8f5

Browse files
committed
table_to_frame: ensure backward compatibility
1 parent 626f9a5 commit 8b2a8f5

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

Orange/data/pandas_compat.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,17 @@ def _is_datetime(s):
7878
np.column_stack(M) if M else None)
7979

8080

81-
def table_to_frame(tab):
81+
def table_to_frame(tab, include_metas=False):
8282
"""
8383
Convert Orange.data.Table to pandas.DataFrame
8484
8585
Parameters
8686
----------
8787
tab : Table
8888
89+
include_metas : bool, (default=False)
90+
Include table metas into dataframe.
91+
8992
Returns
9093
-------
9194
pandas.DataFrame
@@ -122,6 +125,9 @@ def _columns_to_series(cols, vals):
122125
if domain.metas:
123126
metas = _columns_to_series(domain.metas, tab.metas)
124127
all_series = dict(x + y + metas)
125-
original_column_order = [var.name for var in tab.domain.variables + tab.domain.metas]
128+
all_vars = tab.domain.variables
129+
if include_metas:
130+
all_vars += tab.domain.metas
131+
original_column_order = [var.name for var in all_vars]
126132
unsorted_columns_df = pd.DataFrame(all_series)
127133
return unsorted_columns_df[original_column_order]

Orange/data/tests/test_pandas.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint: disable=import-outside-toplevel
12
import unittest
23
import numpy as np
34
from Orange.data import ContinuousVariable, DiscreteVariable, TimeVariable, Table
@@ -7,6 +8,7 @@
78
except ImportError:
89
pd = None
910

11+
1012
@unittest.skipIf(pd is None, "Missing package 'pandas'")
1113
class TestPandasCompat(unittest.TestCase):
1214
def test_table_from_frame(self):
@@ -73,6 +75,20 @@ def test_table_to_frame(self):
7375
self.assertEqual(list(df['sepal length'])[0:4], [5.1, 4.9, 4.7, 4.6])
7476
self.assertEqual(list(df['iris'])[0:2], ['Iris-setosa', 'Iris-setosa'])
7577

78+
def test_table_to_frame_metas(self):
79+
from Orange.data.pandas_compat import table_to_frame
80+
81+
table = Table("zoo")
82+
domain = table.domain
83+
84+
df = table_to_frame(table)
85+
cols = pd.Index([var.name for var in domain.variables])
86+
pd.testing.assert_index_equal(df.columns, cols)
87+
88+
df = table_to_frame(table, include_metas=True)
89+
cols = pd.Index([var.name for var in domain.variables + domain.metas])
90+
pd.testing.assert_index_equal(df.columns, cols)
91+
7692
@unittest.skip("Convert all Orange demo dataset. It takes about 5s which is way to slow")
7793
def test_table_to_frame_on_all_orange_dataset(self):
7894
from os import listdir
@@ -96,3 +112,7 @@ def _get_orange_demo_datasets():
96112
self.assertEqual(type(df), pd.DataFrame, assert_message)
97113
self.assertEqual(len(df), len(table), assert_message)
98114
self.assertEqual(len(df.columns), len(table.domain), assert_message)
115+
116+
117+
if __name__ == "__main__":
118+
unittest.main()

0 commit comments

Comments
 (0)