|
14 | 14 | build_table_schema,
|
15 | 15 | make_field,
|
16 | 16 | set_default_names)
|
| 17 | +import pandas.util.testing as tm |
17 | 18 |
|
18 | 19 |
|
19 | 20 | class TestBuildSchema(object):
|
@@ -471,3 +472,126 @@ def test_mi_falsey_name(self):
|
471 | 472 | ('a', 'b')]))
|
472 | 473 | result = [x['name'] for x in build_table_schema(df)['fields']]
|
473 | 474 | assert result == ['level_0', 'level_1', 0, 1, 2, 3]
|
| 475 | + |
| 476 | + |
| 477 | +class TestTableOrientReader(object): |
| 478 | + |
| 479 | + def test_integer(self): |
| 480 | + df = DataFrame( |
| 481 | + {'A': [1, 2, 3, 4], |
| 482 | + }, |
| 483 | + index=pd.Index(range(4), name='idx')) |
| 484 | + out = df.to_json(orient="table") |
| 485 | + result = pd.read_json(out, orient="table") |
| 486 | + tm.assert_frame_equal(df, result) |
| 487 | + |
| 488 | + def test_object(self): |
| 489 | + df = DataFrame( |
| 490 | + {'B': ['a', 'b', 'c', 'c'], |
| 491 | + }, |
| 492 | + index=pd.Index(range(4), name='idx')) |
| 493 | + out = df.to_json(orient="table") |
| 494 | + result = pd.read_json(out, orient="table") |
| 495 | + tm.assert_frame_equal(df, result) |
| 496 | + |
| 497 | + def test_date_range(self): |
| 498 | + df = DataFrame( |
| 499 | + {'C': pd.date_range('2016-01-01', freq='d', periods=4), |
| 500 | + }, |
| 501 | + index=pd.Index(range(4), name='idx')) |
| 502 | + |
| 503 | + out = df.to_json(orient="table") |
| 504 | + result = pd.read_json(out, orient="table") |
| 505 | + tm.assert_frame_equal(df, result) |
| 506 | + |
| 507 | + def test_timedelta_raises(self): |
| 508 | + df = DataFrame( |
| 509 | + {'D': pd.timedelta_range('1H', periods=4, freq='T'), |
| 510 | + }, |
| 511 | + index=pd.Index(range(4), name='idx')) |
| 512 | + |
| 513 | + out = df.to_json(orient="table") |
| 514 | + with tm.assert_raises_regex(NotImplementedError, 'can not yet read ' |
| 515 | + 'ISO-formatted Timedelta data'): |
| 516 | + pd.read_json(out, orient="table") |
| 517 | + |
| 518 | + def test_categorical(self): |
| 519 | + df = DataFrame( |
| 520 | + {'E': pd.Series(pd.Categorical(['a', 'b', 'c', 'c'])), |
| 521 | + 'F': pd.Series(pd.Categorical(['a', 'b', 'c', 'c'], |
| 522 | + ordered=True)), |
| 523 | + }, |
| 524 | + index=pd.Index(range(4), name='idx')) |
| 525 | + |
| 526 | + out = df.to_json(orient="table") |
| 527 | + result = pd.read_json(out, orient="table") |
| 528 | + tm.assert_frame_equal(df, result) |
| 529 | + |
| 530 | + @pytest.mark.parametrize("float_vals", [ |
| 531 | + pytest.param([1., 2., 3., 4.], marks=pytest.mark.xfail), |
| 532 | + [1.1, 2.2, 3.3, 4.4]]) |
| 533 | + def test_float(self, float_vals): |
| 534 | + df = DataFrame( |
| 535 | + {'G': float_vals, |
| 536 | + }, |
| 537 | + index=pd.Index(range(4), name='idx')) |
| 538 | + |
| 539 | + out = df.to_json(orient="table") |
| 540 | + result = pd.read_json(out, orient="table", convert_axes=False) |
| 541 | + tm.assert_frame_equal(df, result) |
| 542 | + |
| 543 | + def test_timezone_raises(self): |
| 544 | + df = DataFrame( |
| 545 | + {'H': pd.date_range('2016-01-01', freq='d', periods=4, |
| 546 | + tz='US/Central'), |
| 547 | + }, |
| 548 | + index=pd.Index(range(4), name='idx')) |
| 549 | + |
| 550 | + out = df.to_json(orient="table") |
| 551 | + with tm.assert_raises_regex(NotImplementedError, 'can not yet read ' |
| 552 | + 'timezone data'): |
| 553 | + pd.read_json(out, orient="table") |
| 554 | + |
| 555 | + def test_bool(self): |
| 556 | + df = DataFrame( |
| 557 | + {'I': [True, False, False, True], |
| 558 | + }, |
| 559 | + index=pd.Index(range(4), name='idx')) |
| 560 | + |
| 561 | + out = df.to_json(orient="table") |
| 562 | + result = pd.read_json(out, orient="table") |
| 563 | + tm.assert_frame_equal(df, result) |
| 564 | + |
| 565 | + def test_comprehensive(self): |
| 566 | + df = DataFrame( |
| 567 | + {'A': [1, 2, 3, 4], |
| 568 | + 'B': ['a', 'b', 'c', 'c'], |
| 569 | + 'C': pd.date_range('2016-01-01', freq='d', periods=4), |
| 570 | + # 'D': pd.timedelta_range('1H', periods=4, freq='T'), |
| 571 | + 'E': pd.Series(pd.Categorical(['a', 'b', 'c', 'c'])), |
| 572 | + 'F': pd.Series(pd.Categorical(['a', 'b', 'c', 'c'], |
| 573 | + ordered=True)), |
| 574 | + 'G': [1.1, 2.2, 3.3, 4.4], |
| 575 | + # 'H': pd.date_range('2016-01-01', freq='d', periods=4, |
| 576 | + # tz='US/Central'), |
| 577 | + 'I': [True, False, False, True], |
| 578 | + }, |
| 579 | + index=pd.Index(range(4), name='idx')) |
| 580 | + |
| 581 | + out = df.to_json(orient="table") |
| 582 | + result = pd.read_json(out, orient="table") |
| 583 | + tm.assert_frame_equal(df, result) |
| 584 | + |
| 585 | + @pytest.mark.parametrize("index_names", [[None, None], ['foo', 'bar']]) |
| 586 | + def test_multiindex(self, index_names): |
| 587 | + # GH 18912 |
| 588 | + df = pd.DataFrame( |
| 589 | + [["Arr", "alpha", [1, 2, 3, 4]], |
| 590 | + ["Bee", "Beta", [10, 20, 30, 40]]], |
| 591 | + index=[["A", "B"], ["Null", "Eins"]], |
| 592 | + columns=["Aussprache", "Griechisch", "Args"] |
| 593 | + ) |
| 594 | + df.index.names = index_names |
| 595 | + out = df.to_json(orient="table") |
| 596 | + result = pd.read_json(out, orient="table") |
| 597 | + tm.assert_frame_equal(df, result) |
0 commit comments