Skip to content

Commit 1585aa4

Browse files
committed
Merge pull request #4057 from jreback/insert_columns
PERF: perf regressions on insertion of columns into frame (from GH4032)
2 parents 60bb880 + ae44192 commit 1585aa4

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

pandas/core/internals.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,9 @@ def insert(self, loc, item, value, allow_duplicates=False):
17881788
# new block
17891789
self._add_new_block(item, value, loc=loc)
17901790

1791+
if loc != len(self.items)-1 and new_items.is_unique:
1792+
self.set_items_clear(new_items)
1793+
17911794
except:
17921795

17931796
# so our insertion operation failed, so back out of the new items
@@ -1800,8 +1803,6 @@ def insert(self, loc, item, value, allow_duplicates=False):
18001803

18011804
if len(self.blocks) > 100:
18021805
self._consolidate_inplace()
1803-
elif new_items.is_unique:
1804-
self.set_items_clear(new_items)
18051806

18061807
self._known_consolidated = False
18071808

pandas/tests/test_frame.py

+4
Original file line numberDiff line numberDiff line change
@@ -10040,11 +10040,15 @@ def test_insert_column_bug_4032(self):
1004010040
df.insert(0, 'a', [1, 2])
1004110041

1004210042
result = df.rename(columns={})
10043+
str(result)
10044+
1004310045
expected = DataFrame([[1,1.1],[2, 2.2]],columns=['a','b'])
1004410046
assert_frame_equal(result,expected)
1004510047
df.insert(0, 'c', [1.3, 2.3])
1004610048

1004710049
result = df.rename(columns={})
10050+
str(result)
10051+
1004810052
expected = DataFrame([[1.3,1,1.1],[2.3,2, 2.2]],columns=['c','a','b'])
1004910053
assert_frame_equal(result,expected)
1005010054

vb_suite/frame_methods.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,19 @@ def f(K=500):
125125
df[i] = new_col
126126
"""
127127

128-
frame_insert_500_columns = Benchmark('f()', setup,
129-
start_date=datetime(2011, 1, 1))
128+
frame_insert_500_columns_end = Benchmark('f()', setup, start_date=datetime(2011, 1, 1))
129+
130+
setup = common_setup + """
131+
N = 1000
132+
133+
def f(K=100):
134+
df = DataFrame(index=range(N))
135+
new_col = np.random.randn(N)
136+
for i in range(K):
137+
df.insert(0,i,new_col)
138+
"""
139+
140+
frame_insert_100_columns_begin = Benchmark('f()', setup, start_date=datetime(2011, 1, 1))
130141

131142
#----------------------------------------------------------------------
132143
# strings methods, #2602

0 commit comments

Comments
 (0)