Exemple #1
0
def test_dataclass_str():
    # no index
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf = DataClassFrame.from_dataframe(record_class=DataClassExample1,
                                        dataframe=data)
    print(dcf)

    # single index
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf = DataClassFrame.from_dataframe(record_class=DataClassExample1,
                                        dataframe=data,
                                        index="b")
    print(dcf)

    # multi-index
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf = DataClassFrame.from_dataframe(record_class=DataClassExample1,
                                        dataframe=data,
                                        index=["a", "b"])
    print(dcf)
Exemple #2
0
def test_iat_indexing():
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf = DataClassFrame.from_dataframe(record_class=DataClassExample1,
                                        dataframe=data,
                                        index="b")

    row = dcf.iat[0]
    assert isinstance(row, DataClassExample1)
    assert isinstance(row.a, int) and isinstance(row.b, str)
    assert row.a == 1 and row.b == "a"

    data_row = DataClassExample1(a=11, b="ZZ")
    dcf.iat[1] = data_row
    row = dcf.iat[1]
    assert row == data_row
Exemple #3
0
def test_columns():
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf = DataClassFrame.from_dataframe(record_class=DataClassExample1,
                                        dataframe=data,
                                        index="b")

    # Get sum of all columns
    assert 6 == dcf.cols.a.sum()

    # Set and then sum all columns
    dcf.cols.a = 1
    assert 3 == dcf.cols.a.sum()

    # String concatenation
    assert dcf.cols.b.sum() == 'abc'
Exemple #4
0
def test_at_indexing():
    data = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]], columns=["a", "b"])
    dcf: DataClassFrame[DataClassExample1] = DataClassFrame.from_dataframe(
        record_class=DataClassExample1, dataframe=data, index="b")

    row = dcf.at['b']
    assert isinstance(row, DataClassExample1)
    assert isinstance(row.a, int) and isinstance(row.b, str)
    assert row.a == 2 and row.b == "b"

    data_row = DataClassExample1(a=11, b="ZZ")
    dcf.at['ZZ'] = data_row
    row = dcf.at['ZZ']
    assert row == data_row

    with pytest.raises(ValueError):
        # Index key is different to value in record
        dcf.at['A'] = DataClassExample1(a=0, b="B")
Exemple #5
0
def test_multiindex():
    data = """
A	B	C	U	bah	bar	foh	foo
A0	B0	C0	U0	2	0	3	1
A0	B0	C1	U1	6	4	7	5
A0	B0	C2	U2	10	8	11	9
A0	B0	C3	U3	14	12	15	13
A0	B1	C0	U4	18	16	19	17
A0	B1	C1	U5	22	20	23	21
A0	B1	C2	U6	26	24	27	25
A0	B1	C3	U7	30	28	31	29
A1	B0	C0	U8	34	32	35	33
A1	B0	C1	U9	38	36	39	37
A1	B0	C2	U10	42	40	43	41
A1	B0	C3	U11	46	44	47	45
A1	B1	C0	U12	50	48	51	49
A1	B1	C1	U13	54	52	55	53
A1	B1	C2	U14	58	56	59	57
A1	B1	C3	U15	62	60	63	61
    """

    data = pd.read_csv(io.StringIO(data), sep='\t')
    dcf = DataClassFrame.from_dataframe(MIExample,
                                        data,
                                        index=['A', 'B', 'C', 'U'])

    row_0 = dcf.iat[0]
    row_U0 = dcf.at[:, :, :, 'U0']  # Index U0 provides a unique result
    assert row_0 == row_U0

    row_ABC0 = dcf.at['A0', 'B0',
                      'C0', :]  # A, B, C Combination provides a unique result
    assert row_0 == row_ABC0

    # Not a unique key combination
    with pytest.raises(KeyError):
        dcf.at['A0']

    with pytest.raises(KeyError):
        dcf.at['A0', 'B0', :, :]