diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py index 989c9bd95..fb21180b3 100644 --- a/control/tests/timeresp_test.py +++ b/control/tests/timeresp_test.py @@ -1230,6 +1230,14 @@ def test_to_pandas(): np.testing.assert_equal(df['x[0]'], resp.states[0]) np.testing.assert_equal(df['x[1]'], resp.states[1]) + # System with no states + sys = ct.ss([], [], [], 5) + resp = ct.input_output_response(sys, timepts, np.sin(timepts), t_eval=T) + df = resp.to_pandas() + np.testing.assert_equal(df['time'], resp.time) + np.testing.assert_equal(df['u[0]'], resp.inputs) + np.testing.assert_equal(df['y[0]'], resp.inputs * 5) + @pytest.mark.skipif(pandas_check(), reason="pandas installed") def test_no_pandas(): diff --git a/control/timeresp.py b/control/timeresp.py index bc13ad0d1..3822f13f0 100644 --- a/control/timeresp.py +++ b/control/timeresp.py @@ -678,12 +678,15 @@ def to_pandas(self): # Create a dict for setting up the data frame data = {'time': self.time} - data.update( - {name: self.u[i] for i, name in enumerate(self.input_labels)}) - data.update( - {name: self.y[i] for i, name in enumerate(self.output_labels)}) - data.update( - {name: self.x[i] for i, name in enumerate(self.state_labels)}) + if self.ninputs > 0: + data.update( + {name: self.u[i] for i, name in enumerate(self.input_labels)}) + if self.noutputs > 0: + data.update( + {name: self.y[i] for i, name in enumerate(self.output_labels)}) + if self.nstates > 0: + data.update( + {name: self.x[i] for i, name in enumerate(self.state_labels)}) return pandas.DataFrame(data)