예제 #1
0
    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]))
예제 #2
0
    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"))