@@ -361,9 +361,6 @@ def read_hdf(
361
361
>>> df.to_hdf('./store.h5', 'data')
362
362
>>> reread = pd.read_hdf('./store.h5')
363
363
"""
364
- assert not kwargs , kwargs
365
- # NB: in principle more kwargs could be passed to HDFStore, but in
366
- # tests none are.
367
364
368
365
if mode not in ["r" , "r+" , "a" ]:
369
366
raise ValueError (
@@ -500,13 +497,14 @@ class HDFStore:
500
497
"""
501
498
502
499
_handle : Optional ["File" ]
500
+ _mode : str
503
501
_complevel : int
504
502
_fletcher32 : bool
505
503
506
504
def __init__ (
507
505
self ,
508
506
path ,
509
- mode = None ,
507
+ mode : str = "a" ,
510
508
complevel : Optional [int ] = None ,
511
509
complib = None ,
512
510
fletcher32 : bool = False ,
@@ -837,16 +835,24 @@ def select_as_coordinates(
837
835
raise TypeError ("can only read_coordinates with a table" )
838
836
return tbl .read_coordinates (where = where , start = start , stop = stop )
839
837
840
- def select_column (self , key : str , column : str , ** kwargs ):
838
+ def select_column (
839
+ self ,
840
+ key : str ,
841
+ column : str ,
842
+ start : Optional [int ] = None ,
843
+ stop : Optional [int ] = None ,
844
+ ):
841
845
"""
842
846
return a single column from the table. This is generally only useful to
843
847
select an indexable
844
848
845
849
Parameters
846
850
----------
847
851
key : str
848
- column: str
852
+ column : str
849
853
The column of interest.
854
+ start : int or None, default None
855
+ stop : int or None, default None
850
856
851
857
Raises
852
858
------
@@ -859,7 +865,7 @@ def select_column(self, key: str, column: str, **kwargs):
859
865
tbl = self .get_storer (key )
860
866
if not isinstance (tbl , Table ):
861
867
raise TypeError ("can only read_column with a table" )
862
- return tbl .read_column (column = column , ** kwargs )
868
+ return tbl .read_column (column = column , start = start , stop = stop )
863
869
864
870
def select_as_multiple (
865
871
self ,
@@ -2582,9 +2588,9 @@ class Fixed:
2582
2588
2583
2589
Parameters
2584
2590
----------
2585
-
2586
- parent : my parent HDFStore
2587
- group : the group node where the table resides
2591
+ parent : HDFStore
2592
+ group : Node
2593
+ The group node where the table resides.
2588
2594
"""
2589
2595
2590
2596
pandas_kind : str
@@ -2871,7 +2877,7 @@ def read_index(
2871
2877
return self .read_multi_index (key , start = start , stop = stop )
2872
2878
elif variety == "regular" :
2873
2879
node = getattr (self .group , key )
2874
- _ , index = self .read_index_node (node , start = start , stop = stop )
2880
+ index = self .read_index_node (node , start = start , stop = stop )
2875
2881
return index
2876
2882
else : # pragma: no cover
2877
2883
raise TypeError (f"unrecognized index variety: { variety } " )
@@ -2931,13 +2937,13 @@ def read_multi_index(
2931
2937
2932
2938
levels = []
2933
2939
codes = []
2934
- names = []
2940
+ names : List [ Optional [ Hashable ]] = []
2935
2941
for i in range (nlevels ):
2936
2942
level_key = f"{ key } _level{ i } "
2937
2943
node = getattr (self .group , level_key )
2938
- name , lev = self .read_index_node (node , start = start , stop = stop )
2944
+ lev = self .read_index_node (node , start = start , stop = stop )
2939
2945
levels .append (lev )
2940
- names .append (name )
2946
+ names .append (lev . name )
2941
2947
2942
2948
label_key = f"{ key } _label{ i } "
2943
2949
level_codes = self .read_array (label_key , start = start , stop = stop )
@@ -2949,7 +2955,7 @@ def read_multi_index(
2949
2955
2950
2956
def read_index_node (
2951
2957
self , node : "Node" , start : Optional [int ] = None , stop : Optional [int ] = None
2952
- ):
2958
+ ) -> Index :
2953
2959
data = node [start :stop ]
2954
2960
# If the index was an empty array write_array_empty() will
2955
2961
# have written a sentinel. Here we relace it with the original.
@@ -2997,7 +3003,7 @@ def read_index_node(
2997
3003
2998
3004
index .name = name
2999
3005
3000
- return name , index
3006
+ return index
3001
3007
3002
3008
def write_array_empty (self , key : str , value ):
3003
3009
""" write a 0-len array """
@@ -3131,7 +3137,6 @@ def write(self, obj, **kwargs):
3131
3137
3132
3138
class BlockManagerFixed (GenericFixed ):
3133
3139
attributes = ["ndim" , "nblocks" ]
3134
- is_shape_reversed = False
3135
3140
3136
3141
nblocks : int
3137
3142
@@ -3158,10 +3163,6 @@ def shape(self):
3158
3163
3159
3164
shape .append (items )
3160
3165
3161
- # hacky - this works for frames, but is reversed for panels
3162
- if self .is_shape_reversed :
3163
- shape = shape [::- 1 ]
3164
-
3165
3166
return shape
3166
3167
except AttributeError :
3167
3168
return None
@@ -3259,7 +3260,6 @@ class Table(Fixed):
3259
3260
table_type : str
3260
3261
levels = 1
3261
3262
is_table = True
3262
- is_shape_reversed = False
3263
3263
3264
3264
index_axes : List [IndexCol ]
3265
3265
non_index_axes : List [Tuple [int , Any ]]
@@ -3302,7 +3302,7 @@ def __repr__(self) -> str:
3302
3302
f"ncols->{ self .ncols } ,indexers->[{ jindex_axes } ]{ dc } )"
3303
3303
)
3304
3304
3305
- def __getitem__ (self , c ):
3305
+ def __getitem__ (self , c : str ):
3306
3306
""" return the axis for c """
3307
3307
for a in self .axes :
3308
3308
if c == a .name :
@@ -3345,10 +3345,6 @@ def is_multi_index(self) -> bool:
3345
3345
"""the levels attribute is 1 or a list in the case of a multi-index"""
3346
3346
return isinstance (self .levels , list )
3347
3347
3348
- def validate_metadata (self , existing ):
3349
- """ create / validate metadata """
3350
- self .metadata = [c .name for c in self .values_axes if c .metadata is not None ]
3351
-
3352
3348
def validate_multiindex (self , obj ):
3353
3349
"""validate that we can store the multi-index; reset and return the
3354
3350
new object
@@ -3651,8 +3647,8 @@ def read_axes(
3651
3647
Parameters
3652
3648
----------
3653
3649
where : ???
3654
- start: int or None, default None
3655
- stop: int or None, default None
3650
+ start : int or None, default None
3651
+ stop : int or None, default None
3656
3652
3657
3653
Returns
3658
3654
-------
@@ -3946,7 +3942,7 @@ def get_blk_items(mgr, blocks):
3946
3942
self .validate_min_itemsize (min_itemsize )
3947
3943
3948
3944
# validate our metadata
3949
- self .validate_metadata ( existing_table )
3945
+ self .metadata = [ c . name for c in self . values_axes if c . metadata is not None ]
3950
3946
3951
3947
# validate the axes if we have an existing table
3952
3948
if validate :
@@ -4122,7 +4118,13 @@ class WORMTable(Table):
4122
4118
4123
4119
table_type = "worm"
4124
4120
4125
- def read (self , ** kwargs ):
4121
+ def read (
4122
+ self ,
4123
+ where = None ,
4124
+ columns = None ,
4125
+ start : Optional [int ] = None ,
4126
+ stop : Optional [int ] = None ,
4127
+ ):
4126
4128
""" read the indices and the indexing array, calculate offset rows and
4127
4129
return """
4128
4130
raise NotImplementedError ("WORMTable needs to implement read" )
@@ -4479,8 +4481,7 @@ def write(self, obj, data_columns=None, **kwargs):
4479
4481
""" we are going to write this as a frame table """
4480
4482
if not isinstance (obj , DataFrame ):
4481
4483
name = obj .name or "values"
4482
- obj = DataFrame ({name : obj }, index = obj .index )
4483
- obj .columns = [name ]
4484
+ obj = obj .to_frame (name )
4484
4485
return super ().write (obj = obj , data_columns = obj .columns .tolist (), ** kwargs )
4485
4486
4486
4487
def read (
0 commit comments