Skip to content

Commit 33728de

Browse files
author
Joshua Bradt
committed
BUG: Fixed handling of non-list value_vars in melt
Closes pandas-dev#15348.
1 parent 704cdbf commit 33728de

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

pandas/core/reshape.py

+2
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,8 @@ def melt(frame, id_vars=None, value_vars=None, var_name=None,
771771
if value_vars is not None:
772772
if not isinstance(value_vars, (tuple, list, np.ndarray)):
773773
value_vars = [value_vars]
774+
else:
775+
value_vars = list(value_vars)
774776
frame = frame.loc[:, id_vars + value_vars]
775777
else:
776778
frame = frame.copy()

pandas/tests/test_reshape.py

+14
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ def test_value_vars(self):
5656
columns=['id1', 'id2', 'variable', 'value'])
5757
tm.assert_frame_equal(result4, expected4)
5858

59+
def test_value_vars_types(self):
60+
result_with_tuple = melt(self.df, id_vars=['id1', 'id2'], value_vars=('A', 'B'))
61+
result_with_array = melt(self.df, id_vars=['id1', 'id2'], value_vars=np.array(['A', 'B']))
62+
63+
expected = DataFrame({'id1': self.df['id1'].tolist() * 2,
64+
'id2': self.df['id2'].tolist() * 2,
65+
'variable': ['A'] * 10 + ['B'] * 10,
66+
'value': (self.df['A'].tolist() +
67+
self.df['B'].tolist())},
68+
columns=['id1', 'id2', 'variable', 'value'])
69+
70+
tm.assert_frame_equal(result_with_tuple, expected)
71+
tm.assert_frame_equal(result_with_array, expected)
72+
5973
def test_custom_var_name(self):
6074
result5 = melt(self.df, var_name=self.var_name)
6175
self.assertEqual(result5.columns.tolist(), ['var', 'value'])

0 commit comments

Comments
 (0)