def test_pandas(self): ampl = self.ampl if pd is None: self.skipTest("pandas not available") df = pd.DataFrame({"a": [1, 2], "b": [3.5, 4]}, index=["x", "y"]) ampl.eval(""" set S; param a{S}; param b{S}; """) ampl.set_data(df, "S") self.assertEqual(list(ampl.set["S"].members()), ["x", "y"]) self.assertEqual(ampl.param["a"]["x"], 1) self.assertEqual(ampl.param["b"]["y"], 4) df2 = pd.DataFrame( { "a": [10, 20, 30], }, index=["x", "y", "z"], ) df3 = pd.DataFrame({}, index=["xx", "yy"]) df = DataFrame.from_pandas(df) df2 = DataFrame.from_pandas(df2) df3 = DataFrame.from_pandas(df3) self.assertTrue(isinstance(df.to_dict(), dict)) self.assertTrue(isinstance(df.to_list(), list)) self.assertTrue(isinstance(df.to_pandas(), pd.DataFrame)) self.assertEqual(df.to_list()[0][1:], (1, 3.5)) self.assertEqual(df2.to_list()[0], ("x", 10)) self.assertEqual(df3.to_list()[0], "xx") self.assertEqual(set(df.to_dict().keys()), set(["x", "y"])) self.assertEqual(set(df2.to_dict().keys()), set(["x", "y", "z"])) self.assertEqual(set(df3.to_dict().keys()), set(["xx", "yy"])) self.assertEqual(df.to_dict()["x"], (1, 3.5)) self.assertEqual(df2.to_dict()["x"], 10) self.assertEqual(df3.to_dict()["xx"], None) csv_file = os.path.join(os.path.dirname(__file__), "data.csv") p_df = pd.read_csv(csv_file, sep=";", index_col=0) df = DataFrame.from_pandas(p_df) self.assertTrue(isinstance(df.to_dict(), dict)) self.assertEqual(set(df.to_dict().keys()), set([1.0, 2.0, 3.0])) self.assertEqual(set(df.to_list()[0]), set([1.0, 0.01])) self.assertEqual(set(df.to_list()[1]), set([2.0, 0.02])) self.assertEqual(set(df.to_list()[2]), set([3.0, 0.03]))
def test_pandas_named_columns(self): if pd is None: self.skipTest("pandas not available") df_unindexed = pd.DataFrame( [ ["Apple", "Red", 3, 1.29], ["Apple", "Green", 9, 0.99], ["Pear", "Red", 25, 2.59], ["Pear", "Green", 26, 2.79], ["Lime", "Green", 99, 0.39], ], columns=["Fruit", "Color", "Count", "Price"], ) # RangeIndex self.assertEqual( DataFrame.from_pandas(df_unindexed).get_headers(), ("index0", "Fruit", "Color", "Count", "Price"), ) # MultiIndex df_indexed = df_unindexed.set_index(["Fruit", "Color"]) self.assertEqual( DataFrame.from_pandas(df_indexed, index_names=["Fruit", "Color"]).get_headers(), ("Fruit", "Color", "Count", "Price"), ) # Index without name df = pd.DataFrame( [[1, 2, 3, 4, 5], [6, 7, 8, 9, 0]], index=["First", "Second"], columns=[1, 2, 3, 4, 5], ) self.assertEqual( DataFrame.from_pandas(df.stack()).get_headers(), ("index0", "index1", "0"))