@@ -181,8 +181,8 @@ def __init__(self, left, right, how='inner', on=None,
181
181
elif isinstance (self .indicator , bool ):
182
182
self .indicator_name = '_merge' if self .indicator else None
183
183
else :
184
- raise ValueError ('indicator option can only accept boolean or string arguments' )
185
-
184
+ raise ValueError (
185
+ 'indicator option can only accept boolean or string arguments' )
186
186
187
187
# note this function has side effects
188
188
(self .left_join_keys ,
@@ -191,7 +191,8 @@ def __init__(self, left, right, how='inner', on=None,
191
191
192
192
def get_result (self ):
193
193
if self .indicator :
194
- self .left , self .right = self ._indicator_pre_merge (self .left , self .right )
194
+ self .left , self .right = self ._indicator_pre_merge (
195
+ self .left , self .right )
195
196
196
197
join_index , left_indexer , right_indexer = self ._get_join_info ()
197
198
@@ -225,9 +226,11 @@ def _indicator_pre_merge(self, left, right):
225
226
226
227
for i in ['_left_indicator' , '_right_indicator' ]:
227
228
if i in columns :
228
- raise ValueError ("Cannot use `indicator=True` option when data contains a column named {}" .format (i ))
229
+ raise ValueError (
230
+ "Cannot use `indicator=True` option when data contains a column named {}" .format (i ))
229
231
if self .indicator_name in columns :
230
- raise ValueError ("Cannot use name of an existing column for indicator column" )
232
+ raise ValueError (
233
+ "Cannot use name of an existing column for indicator column" )
231
234
232
235
left = left .copy ()
233
236
right = right .copy ()
@@ -245,10 +248,13 @@ def _indicator_post_merge(self, result):
245
248
result ['_left_indicator' ] = result ['_left_indicator' ].fillna (0 )
246
249
result ['_right_indicator' ] = result ['_right_indicator' ].fillna (0 )
247
250
248
- result [self .indicator_name ] = Categorical ((result ['_left_indicator' ] + result ['_right_indicator' ]), categories = [1 ,2 ,3 ])
249
- result [self .indicator_name ] = result [self .indicator_name ].cat .rename_categories (['left_only' , 'right_only' , 'both' ])
251
+ result [self .indicator_name ] = Categorical (
252
+ (result ['_left_indicator' ] + result ['_right_indicator' ]), categories = [1 , 2 , 3 ])
253
+ result [self .indicator_name ] = result [self .indicator_name ].cat .rename_categories (
254
+ ['left_only' , 'right_only' , 'both' ])
250
255
251
- result = result .drop (labels = ['_left_indicator' , '_right_indicator' ], axis = 1 )
256
+ result = result .drop (
257
+ labels = ['_left_indicator' , '_right_indicator' ], axis = 1 )
252
258
253
259
return result
254
260
@@ -274,8 +280,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
274
280
continue
275
281
276
282
right_na_indexer = right_indexer .take (na_indexer )
277
- result .iloc [na_indexer ,key_indexer ] = com .take_1d (self .right_join_keys [i ],
278
- right_na_indexer )
283
+ result .iloc [na_indexer , key_indexer ] = com .take_1d (self .right_join_keys [i ],
284
+ right_na_indexer )
279
285
elif name in self .right :
280
286
if len (self .right ) == 0 :
281
287
continue
@@ -285,8 +291,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
285
291
continue
286
292
287
293
left_na_indexer = left_indexer .take (na_indexer )
288
- result .iloc [na_indexer ,key_indexer ] = com .take_1d (self .left_join_keys [i ],
289
- left_na_indexer )
294
+ result .iloc [na_indexer , key_indexer ] = com .take_1d (self .left_join_keys [i ],
295
+ left_na_indexer )
290
296
elif left_indexer is not None \
291
297
and isinstance (self .left_join_keys [i ], np .ndarray ):
292
298
@@ -384,8 +390,10 @@ def _get_merge_keys(self):
384
390
left_drop = []
385
391
left , right = self .left , self .right
386
392
387
- is_lkey = lambda x : isinstance (x , (np .ndarray , ABCSeries )) and len (x ) == len (left )
388
- is_rkey = lambda x : isinstance (x , (np .ndarray , ABCSeries )) and len (x ) == len (right )
393
+ is_lkey = lambda x : isinstance (
394
+ x , (np .ndarray , ABCSeries )) and len (x ) == len (left )
395
+ is_rkey = lambda x : isinstance (
396
+ x , (np .ndarray , ABCSeries )) and len (x ) == len (right )
389
397
390
398
# ugh, spaghetti re #733
391
399
if _any (self .left_on ) and _any (self .right_on ):
@@ -507,13 +515,13 @@ def _get_join_indexers(left_keys, right_keys, sort=False, how='inner'):
507
515
from functools import partial
508
516
509
517
assert len (left_keys ) == len (right_keys ), \
510
- 'left_key and right_keys must be the same length'
518
+ 'left_key and right_keys must be the same length'
511
519
512
520
# bind `sort` arg. of _factorize_keys
513
521
fkeys = partial (_factorize_keys , sort = sort )
514
522
515
523
# get left & right join labels and num. of levels at each location
516
- llab , rlab , shape = map (list , zip ( * map (fkeys , left_keys , right_keys )))
524
+ llab , rlab , shape = map (list , zip (* map (fkeys , left_keys , right_keys )))
517
525
518
526
# get flat i8 keys from label lists
519
527
lkey , rkey = _get_join_keys (llab , rlab , shape , sort )
@@ -524,7 +532,7 @@ def _get_join_indexers(left_keys, right_keys, sort=False, how='inner'):
524
532
lkey , rkey , count = fkeys (lkey , rkey )
525
533
526
534
# preserve left frame order if how == 'left' and sort == False
527
- kwargs = {'sort' :sort } if how == 'left' else {}
535
+ kwargs = {'sort' : sort } if how == 'left' else {}
528
536
join_func = _join_functions [how ]
529
537
return join_func (lkey , rkey , count , ** kwargs )
530
538
@@ -563,8 +571,10 @@ def get_result(self):
563
571
left_join_indexer = left_indexer
564
572
right_join_indexer = right_indexer
565
573
566
- lindexers = {1 : left_join_indexer } if left_join_indexer is not None else {}
567
- rindexers = {1 : right_join_indexer } if right_join_indexer is not None else {}
574
+ lindexers = {
575
+ 1 : left_join_indexer } if left_join_indexer is not None else {}
576
+ rindexers = {
577
+ 1 : right_join_indexer } if right_join_indexer is not None else {}
568
578
569
579
result_data = concatenate_block_managers (
570
580
[(ldata , lindexers ), (rdata , rindexers )],
@@ -586,7 +596,7 @@ def _get_multiindex_indexer(join_keys, index, sort):
586
596
fkeys = partial (_factorize_keys , sort = sort )
587
597
588
598
# left & right join labels and num. of levels at each location
589
- rlab , llab , shape = map (list , zip ( * map (fkeys , index .levels , join_keys )))
599
+ rlab , llab , shape = map (list , zip (* map (fkeys , index .levels , join_keys )))
590
600
if sort :
591
601
rlab = list (map (np .take , rlab , index .labels ))
592
602
else :
@@ -885,10 +895,10 @@ def __init__(self, objs, axis=0, join='outer', join_axes=None,
885
895
else :
886
896
# filter out the empties
887
897
# if we have not multi-index possibiltes
888
- df = DataFrame ([ obj .shape for obj in objs ]).sum (1 )
889
- non_empties = df [df != 0 ]
898
+ df = DataFrame ([obj .shape for obj in objs ]).sum (1 )
899
+ non_empties = df [df != 0 ]
890
900
if len (non_empties ) and (keys is None and names is None and levels is None and join_axes is None ):
891
- objs = [ objs [i ] for i in non_empties .index ]
901
+ objs = [objs [i ] for i in non_empties .index ]
892
902
sample = objs [0 ]
893
903
894
904
if sample is None :
@@ -917,12 +927,12 @@ def __init__(self, objs, axis=0, join='outer', join_axes=None,
917
927
if ndim == max_ndim :
918
928
pass
919
929
920
- elif ndim != max_ndim - 1 :
930
+ elif ndim != max_ndim - 1 :
921
931
raise ValueError ("cannot concatenate unaligned mixed "
922
932
"dimensional NDFrame objects" )
923
933
924
934
else :
925
- name = getattr (obj ,'name' ,None )
935
+ name = getattr (obj , 'name' , None )
926
936
if ignore_index or name is None :
927
937
name = current_column
928
938
current_column += 1
@@ -931,7 +941,7 @@ def __init__(self, objs, axis=0, join='outer', join_axes=None,
931
941
# to line up
932
942
if self ._is_frame and axis == 1 :
933
943
name = 0
934
- obj = sample ._constructor ({ name : obj })
944
+ obj = sample ._constructor ({name : obj })
935
945
936
946
self .objs .append (obj )
937
947
@@ -965,9 +975,11 @@ def get_result(self):
965
975
index , columns = self .new_axes
966
976
tmpdf = DataFrame (data , index = index )
967
977
# checks if the column variable already stores valid column names (because set via the 'key' argument
968
- # in the 'concat' function call. If that's not the case, use the series names as column names
978
+ # in the 'concat' function call. If that's not the case, use
979
+ # the series names as column names
969
980
if columns .equals (Index (np .arange (len (self .objs )))) and not self .ignore_index :
970
- columns = np .array ([ data [i ].name for i in range (len (data )) ], dtype = 'object' )
981
+ columns = np .array (
982
+ [data [i ].name for i in range (len (data ))], dtype = 'object' )
971
983
indexer = isnull (columns )
972
984
if indexer .any ():
973
985
columns [indexer ] = np .arange (len (indexer [indexer ]))
@@ -1091,7 +1103,7 @@ def _maybe_check_integrity(self, concat_index):
1091
1103
if not concat_index .is_unique :
1092
1104
overlap = concat_index .get_duplicates ()
1093
1105
raise ValueError ('Indexes have overlapping values: %s'
1094
- % str (overlap ))
1106
+ % str (overlap ))
1095
1107
1096
1108
1097
1109
def _concat_indexes (indexes ):
@@ -1106,7 +1118,8 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None):
1106
1118
names = [None ] * len (zipped )
1107
1119
1108
1120
if levels is None :
1109
- levels = [Categorical .from_array (zp , ordered = True ).categories for zp in zipped ]
1121
+ levels = [Categorical .from_array (
1122
+ zp , ordered = True ).categories for zp in zipped ]
1110
1123
else :
1111
1124
levels = [_ensure_index (x ) for x in levels ]
1112
1125
else :
@@ -1152,7 +1165,7 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None):
1152
1165
names = list (names )
1153
1166
else :
1154
1167
# make sure that all of the passed indices have the same nlevels
1155
- if not len (set ([ i .nlevels for i in indexes ])) == 1 :
1168
+ if not len (set ([i .nlevels for i in indexes ])) == 1 :
1156
1169
raise AssertionError ("Cannot concat indices that do"
1157
1170
" not have the same number of levels" )
1158
1171
0 commit comments