@@ -717,7 +717,7 @@ def __setitem__(self, key, value):
717
717
718
718
self ._boolean_set (key , value )
719
719
else :
720
- self ._insert_item (key , value )
720
+ self ._set_item (key , value )
721
721
722
722
def _boolean_set (self , key , value ):
723
723
mask = key .values
@@ -729,7 +729,23 @@ def _boolean_set(self, key, value):
729
729
730
730
self .values [mask ] = value
731
731
732
- def _insert_item (self , key , value ):
732
+ def insert (self , loc , column , value ):
733
+ """
734
+ Insert column into DataFrame at specified location. Raises Exception if
735
+ column is already contained in the DataFrame
736
+
737
+ Parameters
738
+ ----------
739
+ loc : int
740
+ Must have 0 <= loc <= len(columns)
741
+ column : object
742
+ value : int, Series, or array-like
743
+ """
744
+ value = self ._sanitize_column (value )
745
+ value = np .atleast_2d (value ) # is this a hack?
746
+ self ._data .insert (loc , column , value )
747
+
748
+ def _set_item (self , key , value ):
733
749
"""
734
750
Add series to DataFrame in specified column.
735
751
@@ -739,9 +755,13 @@ def _insert_item(self, key, value):
739
755
Series/TimeSeries will be conformed to the DataFrame's index to
740
756
ensure homogeneity.
741
757
"""
758
+ value = self ._sanitize_column (value )
759
+ value = np .atleast_2d (value ) # is this a hack?
760
+ self ._data .set (key , value )
761
+
762
+ def _sanitize_column (self , value ):
742
763
# Need to make sure new columns (which go into the BlockManager as new
743
764
# blocks) are always copied
744
-
745
765
if hasattr (value , '__iter__' ):
746
766
if isinstance (value , Series ):
747
767
if value .index .equals (self .index ):
@@ -761,8 +781,7 @@ def _insert_item(self, key, value):
761
781
else :
762
782
value = np .repeat (value , len (self .index ))
763
783
764
- value = np .atleast_2d (value )
765
- self ._data .set (key , value )
784
+ return value
766
785
767
786
def __delitem__ (self , key ):
768
787
"""
0 commit comments