17
17
AttributeConflictWarning , DuplicateWarning ,
18
18
PossibleDataLossError , ClosedFileError )
19
19
import pandas .util .testing as tm
20
- from pandas .tests .test_series import assert_series_equal
21
- from pandas .tests .test_frame import assert_frame_equal
20
+ from pandas .util .testing import (assert_panel4d_equal ,
21
+ assert_panel_equal ,
22
+ assert_frame_equal ,
23
+ assert_series_equal )
22
24
from pandas import concat , Timestamp
23
25
from pandas import compat
24
26
@@ -134,7 +136,7 @@ def roundtrip(key, obj,**kwargs):
134
136
assert_frame_equal (o , roundtrip ('frame' ,o ))
135
137
136
138
o = tm .makePanel ()
137
- tm . assert_panel_equal (o , roundtrip ('panel' ,o ))
139
+ assert_panel_equal (o , roundtrip ('panel' ,o ))
138
140
139
141
# table
140
142
df = DataFrame (dict (A = lrange (5 ), B = lrange (5 )))
@@ -521,22 +523,22 @@ def test_append(self):
521
523
_maybe_remove (store , 'wp1' )
522
524
store .append ('wp1' , wp .ix [:, :10 , :])
523
525
store .append ('wp1' , wp .ix [:, 10 :, :])
524
- tm . assert_panel_equal (store ['wp1' ], wp )
526
+ assert_panel_equal (store ['wp1' ], wp )
525
527
526
528
# ndim
527
529
p4d = tm .makePanel4D ()
528
530
_maybe_remove (store , 'p4d' )
529
531
store .append ('p4d' , p4d .ix [:, :, :10 , :])
530
532
store .append ('p4d' , p4d .ix [:, :, 10 :, :])
531
- tm . assert_panel4d_equal (store ['p4d' ], p4d )
533
+ assert_panel4d_equal (store ['p4d' ], p4d )
532
534
533
535
# test using axis labels
534
536
_maybe_remove (store , 'p4d' )
535
537
store .append ('p4d' , p4d .ix [:, :, :10 , :], axes = [
536
538
'items' , 'major_axis' , 'minor_axis' ])
537
539
store .append ('p4d' , p4d .ix [:, :, 10 :, :], axes = [
538
540
'items' , 'major_axis' , 'minor_axis' ])
539
- tm . assert_panel4d_equal (store ['p4d' ], p4d )
541
+ assert_panel4d_equal (store ['p4d' ], p4d )
540
542
541
543
# test using differnt number of items on each axis
542
544
p4d2 = p4d .copy ()
@@ -545,15 +547,15 @@ def test_append(self):
545
547
_maybe_remove (store , 'p4d2' )
546
548
store .append (
547
549
'p4d2' , p4d2 , axes = ['items' , 'major_axis' , 'minor_axis' ])
548
- tm . assert_panel4d_equal (store ['p4d2' ], p4d2 )
550
+ assert_panel4d_equal (store ['p4d2' ], p4d2 )
549
551
550
552
# test using differt order of items on the non-index axes
551
553
_maybe_remove (store , 'wp1' )
552
554
wp_append1 = wp .ix [:, :10 , :]
553
555
store .append ('wp1' , wp_append1 )
554
556
wp_append2 = wp .ix [:, 10 :, :].reindex (items = wp .items [::- 1 ])
555
557
store .append ('wp1' , wp_append2 )
556
- tm . assert_panel_equal (store ['wp1' ], wp )
558
+ assert_panel_equal (store ['wp1' ], wp )
557
559
558
560
# dtype issues - mizxed type in a single object column
559
561
df = DataFrame (data = [[1 , 2 ], [0 , 1 ], [1 , 2 ], [0 , 0 ]])
@@ -757,15 +759,15 @@ def check_indexers(key, indexers):
757
759
_maybe_remove (store , 'p4d' )
758
760
store .append ('p4d' , p4d .ix [:, :, :10 , :], axes = indexers )
759
761
store .append ('p4d' , p4d .ix [:, :, 10 :, :])
760
- tm . assert_panel4d_equal (store .select ('p4d' ), p4d )
762
+ assert_panel4d_equal (store .select ('p4d' ), p4d )
761
763
check_indexers ('p4d' , indexers )
762
764
763
765
# same as above, but try to append with differnt axes
764
766
_maybe_remove (store , 'p4d' )
765
767
store .append ('p4d' , p4d .ix [:, :, :10 , :], axes = indexers )
766
768
store .append ('p4d' , p4d .ix [:, :, 10 :, :], axes = [
767
769
'labels' , 'items' , 'major_axis' ])
768
- tm . assert_panel4d_equal (store .select ('p4d' ), p4d )
770
+ assert_panel4d_equal (store .select ('p4d' ), p4d )
769
771
check_indexers ('p4d' , indexers )
770
772
771
773
# pass incorrect number of axes
@@ -778,34 +780,34 @@ def check_indexers(key, indexers):
778
780
_maybe_remove (store , 'p4d' )
779
781
store .append ('p4d' , p4d .ix [:, :, :10 , :], axes = indexers )
780
782
store .append ('p4d' , p4d .ix [:, :, 10 :, :])
781
- tm . assert_panel4d_equal (store ['p4d' ], p4d )
783
+ assert_panel4d_equal (store ['p4d' ], p4d )
782
784
check_indexers ('p4d' , indexers )
783
785
784
786
# different than default indexables #2
785
787
indexers = ['major_axis' , 'labels' , 'minor_axis' ]
786
788
_maybe_remove (store , 'p4d' )
787
789
store .append ('p4d' , p4d .ix [:, :, :10 , :], axes = indexers )
788
790
store .append ('p4d' , p4d .ix [:, :, 10 :, :])
789
- tm . assert_panel4d_equal (store ['p4d' ], p4d )
791
+ assert_panel4d_equal (store ['p4d' ], p4d )
790
792
check_indexers ('p4d' , indexers )
791
793
792
794
# partial selection
793
795
result = store .select ('p4d' , ['labels=l1' ])
794
796
expected = p4d .reindex (labels = ['l1' ])
795
- tm . assert_panel4d_equal (result , expected )
797
+ assert_panel4d_equal (result , expected )
796
798
797
799
# partial selection2
798
800
result = store .select ('p4d' , [Term (
799
801
'labels=l1' ), Term ('items=ItemA' ), Term ('minor_axis=B' )])
800
802
expected = p4d .reindex (
801
803
labels = ['l1' ], items = ['ItemA' ], minor_axis = ['B' ])
802
- tm . assert_panel4d_equal (result , expected )
804
+ assert_panel4d_equal (result , expected )
803
805
804
806
# non-existant partial selection
805
807
result = store .select ('p4d' , [Term (
806
808
'labels=l1' ), Term ('items=Item1' ), Term ('minor_axis=B' )])
807
809
expected = p4d .reindex (labels = ['l1' ], items = [], minor_axis = ['B' ])
808
- tm . assert_panel4d_equal (result , expected )
810
+ assert_panel4d_equal (result , expected )
809
811
810
812
def test_append_with_strings (self ):
811
813
@@ -821,15 +823,15 @@ def check_col(key,name,size):
821
823
store .append ('s1' , wp2 )
822
824
expected = concat ([wp , wp2 ], axis = 2 )
823
825
expected = expected .reindex (minor_axis = sorted (expected .minor_axis ))
824
- tm . assert_panel_equal (store ['s1' ], expected )
826
+ assert_panel_equal (store ['s1' ], expected )
825
827
check_col ('s1' , 'minor_axis' , 20 )
826
828
827
829
# test dict format
828
830
store .append ('s2' , wp , min_itemsize = {'minor_axis' : 20 })
829
831
store .append ('s2' , wp2 )
830
832
expected = concat ([wp , wp2 ], axis = 2 )
831
833
expected = expected .reindex (minor_axis = sorted (expected .minor_axis ))
832
- tm . assert_panel_equal (store ['s2' ], expected )
834
+ assert_panel_equal (store ['s2' ], expected )
833
835
check_col ('s2' , 'minor_axis' , 20 )
834
836
835
837
# apply the wrong field (similar to #1)
@@ -1305,10 +1307,46 @@ def check(obj, comparator):
1305
1307
check (df , tm .assert_frame_equal )
1306
1308
1307
1309
p = tm .makePanel ()
1308
- check (p , tm . assert_panel_equal )
1310
+ check (p , assert_panel_equal )
1309
1311
1310
1312
p4d = tm .makePanel4D ()
1311
- check (p4d , tm .assert_panel4d_equal )
1313
+ check (p4d , assert_panel4d_equal )
1314
+
1315
+ # empty frame, GH4273
1316
+ with ensure_clean (self .path ) as store :
1317
+
1318
+ # 0 len
1319
+ df_empty = DataFrame (columns = list ('ABC' ))
1320
+ store .append ('df' ,df_empty )
1321
+ self .assertRaises (KeyError ,store .select , 'df' )
1322
+
1323
+ # repeated append of 0/non-zero frames
1324
+ df = DataFrame (np .random .rand (10 ,3 ),columns = list ('ABC' ))
1325
+ store .append ('df' ,df )
1326
+ assert_frame_equal (store .select ('df' ),df )
1327
+ store .append ('df' ,df_empty )
1328
+ assert_frame_equal (store .select ('df' ),df )
1329
+
1330
+ # store
1331
+ df = DataFrame (columns = list ('ABC' ))
1332
+ store .put ('df2' ,df )
1333
+ assert_frame_equal (store .select ('df2' ),df )
1334
+
1335
+ # 0 len
1336
+ p_empty = Panel (items = list ('ABC' ))
1337
+ store .append ('p' ,p_empty )
1338
+ self .assertRaises (KeyError ,store .select , 'p' )
1339
+
1340
+ # repeated append of 0/non-zero frames
1341
+ p = Panel (np .random .randn (3 ,4 ,5 ),items = list ('ABC' ))
1342
+ store .append ('p' ,p )
1343
+ assert_panel_equal (store .select ('p' ),p )
1344
+ store .append ('p' ,p_empty )
1345
+ assert_panel_equal (store .select ('p' ),p )
1346
+
1347
+ # store
1348
+ store .put ('p2' ,p_empty )
1349
+ assert_panel_equal (store .select ('p2' ),p_empty )
1312
1350
1313
1351
def test_append_raise (self ):
1314
1352
@@ -1433,7 +1471,7 @@ def test_table_mixed_dtypes(self):
1433
1471
1434
1472
with ensure_clean (self .path ) as store :
1435
1473
store .append ('p1_mixed' , wp )
1436
- tm . assert_panel_equal (store .select ('p1_mixed' ), wp )
1474
+ assert_panel_equal (store .select ('p1_mixed' ), wp )
1437
1475
1438
1476
# ndim
1439
1477
wp = tm .makePanel4D ()
@@ -1447,7 +1485,7 @@ def test_table_mixed_dtypes(self):
1447
1485
1448
1486
with ensure_clean (self .path ) as store :
1449
1487
store .append ('p4d_mixed' , wp )
1450
- tm . assert_panel4d_equal (store .select ('p4d_mixed' ), wp )
1488
+ assert_panel4d_equal (store .select ('p4d_mixed' ), wp )
1451
1489
1452
1490
def test_unimplemented_dtypes_table_columns (self ):
1453
1491
@@ -1595,7 +1633,7 @@ def test_remove_where(self):
1595
1633
store .remove ('wp' , [('minor_axis' , ['A' , 'D' ])])
1596
1634
rs = store .select ('wp' )
1597
1635
expected = wp .reindex (minor_axis = ['B' , 'C' ])
1598
- tm . assert_panel_equal (rs , expected )
1636
+ assert_panel_equal (rs , expected )
1599
1637
1600
1638
# empty where
1601
1639
_maybe_remove (store , 'wp' )
@@ -1630,7 +1668,7 @@ def test_remove_crit(self):
1630
1668
assert (n == 36 )
1631
1669
result = store .select ('wp3' )
1632
1670
expected = wp .reindex (major_axis = wp .major_axis - date4 )
1633
- tm . assert_panel_equal (result , expected )
1671
+ assert_panel_equal (result , expected )
1634
1672
1635
1673
# upper half
1636
1674
store .put ('wp' , wp , table = True )
@@ -1647,7 +1685,7 @@ def test_remove_crit(self):
1647
1685
1648
1686
result = store ['wp' ]
1649
1687
expected = wp .truncate (after = date ).reindex (minor = ['B' , 'C' ])
1650
- tm . assert_panel_equal (result , expected )
1688
+ assert_panel_equal (result , expected )
1651
1689
1652
1690
# individual row elements
1653
1691
store .put ('wp2' , wp , table = True )
@@ -1657,30 +1695,30 @@ def test_remove_crit(self):
1657
1695
store .remove ('wp2' , where = [crit1 ])
1658
1696
result = store .select ('wp2' )
1659
1697
expected = wp .reindex (major_axis = wp .major_axis - date1 )
1660
- tm . assert_panel_equal (result , expected )
1698
+ assert_panel_equal (result , expected )
1661
1699
1662
1700
date2 = wp .major_axis [5 ]
1663
1701
crit2 = Term ('major_axis' , date2 )
1664
1702
store .remove ('wp2' , where = [crit2 ])
1665
1703
result = store ['wp2' ]
1666
1704
expected = wp .reindex (
1667
1705
major_axis = wp .major_axis - date1 - Index ([date2 ]))
1668
- tm . assert_panel_equal (result , expected )
1706
+ assert_panel_equal (result , expected )
1669
1707
1670
1708
date3 = [wp .major_axis [7 ], wp .major_axis [9 ]]
1671
1709
crit3 = Term ('major_axis' , date3 )
1672
1710
store .remove ('wp2' , where = [crit3 ])
1673
1711
result = store ['wp2' ]
1674
1712
expected = wp .reindex (
1675
1713
major_axis = wp .major_axis - date1 - Index ([date2 ]) - Index (date3 ))
1676
- tm . assert_panel_equal (result , expected )
1714
+ assert_panel_equal (result , expected )
1677
1715
1678
1716
# corners
1679
1717
store .put ('wp4' , wp , table = True )
1680
1718
n = store .remove (
1681
1719
'wp4' , where = [Term ('major_axis' , '>' , wp .major_axis [- 1 ])])
1682
1720
result = store .select ('wp4' )
1683
- tm . assert_panel_equal (result , wp )
1721
+ assert_panel_equal (result , wp )
1684
1722
1685
1723
def test_terms (self ):
1686
1724
@@ -1710,15 +1748,15 @@ def test_terms(self):
1710
1748
result = store .select ('wp' , [Term (
1711
1749
'major_axis<20000108' ), Term ('minor_axis' , '=' , ['A' , 'B' ])])
1712
1750
expected = wp .truncate (after = '20000108' ).reindex (minor = ['A' , 'B' ])
1713
- tm . assert_panel_equal (result , expected )
1751
+ assert_panel_equal (result , expected )
1714
1752
1715
1753
# p4d
1716
1754
result = store .select ('p4d' , [Term ('major_axis<20000108' ),
1717
1755
Term ('minor_axis' , '=' , ['A' , 'B' ]),
1718
1756
Term ('items' , '=' , ['ItemA' , 'ItemB' ])])
1719
1757
expected = p4d .truncate (after = '20000108' ).reindex (
1720
1758
minor = ['A' , 'B' ], items = ['ItemA' , 'ItemB' ])
1721
- tm . assert_panel4d_equal (result , expected )
1759
+ assert_panel4d_equal (result , expected )
1722
1760
1723
1761
# valid terms
1724
1762
terms = [
@@ -1805,15 +1843,15 @@ def test_sparse_panel(self):
1805
1843
p = Panel (dict ((i , tm .makeDataFrame ().ix [:2 , :2 ]) for i in items ))
1806
1844
sp = p .to_sparse ()
1807
1845
1808
- self ._check_double_roundtrip (sp , tm . assert_panel_equal ,
1846
+ self ._check_double_roundtrip (sp , assert_panel_equal ,
1809
1847
check_panel_type = True )
1810
1848
1811
1849
sp2 = p .to_sparse (kind = 'integer' )
1812
- self ._check_double_roundtrip (sp2 , tm . assert_panel_equal ,
1850
+ self ._check_double_roundtrip (sp2 , assert_panel_equal ,
1813
1851
check_panel_type = True )
1814
1852
1815
1853
sp3 = p .to_sparse (fill_value = 0 )
1816
- self ._check_double_roundtrip (sp3 , tm . assert_panel_equal ,
1854
+ self ._check_double_roundtrip (sp3 , assert_panel_equal ,
1817
1855
check_panel_type = True )
1818
1856
1819
1857
def test_float_index (self ):
@@ -2034,12 +2072,12 @@ def _make_one():
2034
2072
def test_wide (self ):
2035
2073
2036
2074
wp = tm .makePanel ()
2037
- self ._check_roundtrip (wp , tm . assert_panel_equal )
2075
+ self ._check_roundtrip (wp , assert_panel_equal )
2038
2076
2039
2077
def test_wide_table (self ):
2040
2078
2041
2079
wp = tm .makePanel ()
2042
- self ._check_roundtrip_table (wp , tm . assert_panel_equal )
2080
+ self ._check_roundtrip_table (wp , assert_panel_equal )
2043
2081
2044
2082
def test_wide_table_dups (self ):
2045
2083
wp = tm .makePanel ()
@@ -2050,11 +2088,11 @@ def test_wide_table_dups(self):
2050
2088
with tm .assert_produces_warning (expected_warning = DuplicateWarning ):
2051
2089
recons = store ['panel' ]
2052
2090
2053
- tm . assert_panel_equal (recons , wp )
2091
+ assert_panel_equal (recons , wp )
2054
2092
2055
2093
def test_long (self ):
2056
2094
def _check (left , right ):
2057
- tm . assert_panel_equal (left .to_panel (), right .to_panel ())
2095
+ assert_panel_equal (left .to_panel (), right .to_panel ())
2058
2096
2059
2097
wp = tm .makePanel ()
2060
2098
self ._check_roundtrip (wp .to_frame (), _check )
@@ -2129,7 +2167,7 @@ def test_select(self):
2129
2167
items = ['Item%03d' % i for i in range (80 )]
2130
2168
result = store .select ('wp' , Term ('items' , items ))
2131
2169
expected = wp .reindex (items = items )
2132
- tm . assert_panel_equal (expected , result )
2170
+ assert_panel_equal (expected , result )
2133
2171
2134
2172
# selectin non-table with a where
2135
2173
# self.assertRaises(ValueError, store.select,
@@ -2414,12 +2452,12 @@ def test_panel_select(self):
2414
2452
2415
2453
result = store .select ('wp' , [crit1 , crit2 ])
2416
2454
expected = wp .truncate (before = date ).reindex (minor = ['A' , 'D' ])
2417
- tm . assert_panel_equal (result , expected )
2455
+ assert_panel_equal (result , expected )
2418
2456
2419
2457
result = store .select (
2420
2458
'wp' , ['major_axis>=20000124' , ('minor_axis' , '=' , ['A' , 'B' ])])
2421
2459
expected = wp .truncate (before = '20000124' ).reindex (minor = ['A' , 'B' ])
2422
- tm . assert_panel_equal (result , expected )
2460
+ assert_panel_equal (result , expected )
2423
2461
2424
2462
def test_frame_select (self ):
2425
2463
0 commit comments