Skip to content

Commit 4a9a063

Browse files
committed
table_to_frame: ensure backward compatibility
1 parent 626f9a5 commit 4a9a063

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-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: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
except ImportError:
88
pd = None
99

10+
1011
@unittest.skipIf(pd is None, "Missing package 'pandas'")
1112
class TestPandasCompat(unittest.TestCase):
1213
def test_table_from_frame(self):
@@ -73,6 +74,20 @@ def test_table_to_frame(self):
7374
self.assertEqual(list(df['sepal length'])[0:4], [5.1, 4.9, 4.7, 4.6])
7475
self.assertEqual(list(df['iris'])[0:2], ['Iris-setosa', 'Iris-setosa'])
7576

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

0 commit comments

Comments
 (0)