Skip to content

Commit 079aee8

Browse files
committed
BUG: eradicate use of NULL_INDEX 'singleton', failing unit test for #980
1 parent 3247078 commit 079aee8

File tree

8 files changed

+35
-35
lines changed

8 files changed

+35
-35
lines changed

pandas/core/common.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -335,11 +335,8 @@ def _is_bool_indexer(key):
335335
return False
336336

337337
def _default_index(n):
338-
from pandas.core.index import NULL_INDEX, Index
339-
if n == 0:
340-
return NULL_INDEX
341-
else:
342-
return Index(np.arange(n))
338+
from pandas.core.index import Index
339+
return Index(np.arange(n))
343340

344341
def ensure_float(arr):
345342
if issubclass(arr.dtype.type, np.integer):

pandas/core/frame.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
_default_index, _stringify)
2929
from pandas.core.daterange import DateRange
3030
from pandas.core.generic import NDFrame
31-
from pandas.core.index import Index, MultiIndex, NULL_INDEX, _ensure_index
31+
from pandas.core.index import Index, MultiIndex, _ensure_index
3232
from pandas.core.indexing import _NDFrameIndexer, _maybe_droplevels
3333
from pandas.core.internals import BlockManager, make_block, form_blocks
3434
from pandas.core.series import Series, _radd_compat
@@ -3927,7 +3927,7 @@ def extract_index(data):
39273927

39283928
index = None
39293929
if len(data) == 0:
3930-
index = NULL_INDEX
3930+
index = Index([])
39313931
elif len(data) > 0 and index is None:
39323932
raw_lengths = []
39333933
indexes = []
@@ -3964,9 +3964,6 @@ def extract_index(data):
39643964
else:
39653965
index = Index(np.arange(lengths[0]))
39663966

3967-
if len(index) == 0:
3968-
index = NULL_INDEX
3969-
39703967
return _ensure_index(index)
39713968

39723969

pandas/core/index.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ def get_value(self, series, key):
514514
try:
515515
return self._engine.get_value(series, key)
516516
except KeyError, e1:
517-
if self.inferred_type == 'integer':
517+
if len(self) > 0 and self.inferred_type == 'integer':
518518
raise
519519

520520
try:
@@ -2128,8 +2128,6 @@ def _wrap_joined_index(self, joined, other):
21282128

21292129
# For utility purposes
21302130

2131-
NULL_INDEX = Index([])
2132-
21332131

21342132
def _sparsify(label_list):
21352133
pivoted = zip(*label_list)
@@ -2172,7 +2170,7 @@ def _validate_join_method(method):
21722170
def _get_combined_index(indexes, intersect=False):
21732171
indexes = _get_distinct_indexes(indexes)
21742172
if len(indexes) == 0:
2175-
return NULL_INDEX
2173+
return Index([])
21762174
if len(indexes) == 1:
21772175
return indexes[0]
21782176
if intersect:

pandas/core/panel.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from pandas.core.common import (PandasError, _mut_exclusive,
1111
_try_sort, _default_index, _infer_dtype)
1212
from pandas.core.index import (Factor, Index, MultiIndex, _ensure_index,
13-
_get_combined_index, NULL_INDEX)
13+
_get_combined_index)
1414
from pandas.core.indexing import _NDFrameIndexer, _maybe_droplevels
1515
from pandas.core.internals import BlockManager, make_block, form_blocks
1616
from pandas.core.frame import DataFrame
@@ -1273,7 +1273,7 @@ def _extract_axis(data, axis=0, intersect=False):
12731273
from pandas.core.index import _union_indexes
12741274

12751275
if len(data) == 0:
1276-
index = NULL_INDEX
1276+
index = Index([])
12771277
elif len(data) > 0:
12781278
raw_lengths = []
12791279
indexes = []
@@ -1302,9 +1302,6 @@ def _extract_axis(data, axis=0, intersect=False):
13021302
else:
13031303
index = Index(np.arange(lengths[0]))
13041304

1305-
if len(index) == 0:
1306-
index = NULL_INDEX
1307-
13081305
return _ensure_index(index)
13091306

13101307

pandas/sparse/frame.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import numpy as np
1010

1111
from pandas.core.common import _pickle_array, _unpickle_array, _try_sort
12-
from pandas.core.index import Index, MultiIndex, NULL_INDEX, _ensure_index
12+
from pandas.core.index import Index, MultiIndex, _ensure_index
1313
from pandas.core.series import Series
1414
from pandas.core.frame import (DataFrame, extract_index, _prep_ndarray,
1515
_default_index)
@@ -80,10 +80,10 @@ def __init__(self, data=None, index=None, columns=None,
8080
sdict = {}
8181

8282
if index is None:
83-
index = NULL_INDEX
83+
index = Index([])
8484

8585
if columns is None:
86-
columns = NULL_INDEX
86+
columns = Index([])
8787
else:
8888
for c in columns:
8989
sdict[c] = Series(np.nan, index=index)

pandas/tests/test_frame.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import pandas.core.common as com
2020
import pandas.core.format as fmt
2121
import pandas.core.datetools as datetools
22-
from pandas.core.index import NULL_INDEX
2322
from pandas.core.api import (DataFrame, Index, Series, notnull, isnull,
2423
MultiIndex)
2524
from pandas.io.parsers import (ExcelFile, ExcelWriter)
@@ -1289,14 +1288,15 @@ def test_constructor_dict(self):
12891288

12901289
# with dict of empty list and Series
12911290
frame = DataFrame({'A' : [], 'B' : []}, columns=['A', 'B'])
1292-
self.assert_(frame.index is NULL_INDEX)
1291+
self.assert_(frame.index.equals(Index([])))
12931292

12941293
def test_constructor_subclass_dict(self):
12951294
# Test for passing dict subclass to constructor
12961295
data = {'col1': tm.TestSubDict((x, 10.0 * x) for x in xrange(10)),
12971296
'col2': tm.TestSubDict((x, 20.0 * x) for x in xrange(10))}
12981297
df = DataFrame(data)
1299-
refdf = DataFrame(dict((col, dict(val.iteritems())) for col, val in data.iteritems()))
1298+
refdf = DataFrame(dict((col, dict(val.iteritems()))
1299+
for col, val in data.iteritems()))
13001300
assert_frame_equal(refdf, df)
13011301

13021302
data = tm.TestSubDict(data.iteritems())
@@ -1400,7 +1400,7 @@ def test_constructor_ndarray(self):
14001400

14011401
# 0-length axis
14021402
frame = DataFrame(np.empty((0, 3)))
1403-
self.assert_(frame.index is NULL_INDEX)
1403+
self.assert_(len(frame.index) == 0)
14041404

14051405
frame = DataFrame(np.empty((3, 0)))
14061406
self.assert_(len(frame.columns) == 0)
@@ -1458,7 +1458,7 @@ def test_constructor_maskedarray(self):
14581458

14591459
# 0-length axis
14601460
frame = DataFrame(ma.masked_all((0, 3)))
1461-
self.assert_(frame.index is NULL_INDEX)
1461+
self.assert_(len(frame.index) == 0)
14621462

14631463
frame = DataFrame(ma.masked_all((3, 0)))
14641464
self.assert_(len(frame.columns) == 0)
@@ -1720,6 +1720,12 @@ def test_constructor_miscast_na_int_dtype(self):
17201720
expected = DataFrame([[np.nan, 1], [1, 0]])
17211721
assert_frame_equal(df, expected)
17221722

1723+
def test_new_empty_index(self):
1724+
df1 = DataFrame(randn(0, 3))
1725+
df2 = DataFrame(randn(0, 3))
1726+
df1.index.name = 'foo'
1727+
self.assert_(df2.index.name is None)
1728+
17231729
def test_astype(self):
17241730
casted = self.frame.astype(int)
17251731
expected = DataFrame(self.frame.values.astype(int),

pandas/tests/test_index.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,6 @@ def testit(index):
263263

264264
testit(self.dateIndex)
265265

266-
# def test_always_get_null_index(self):
267-
# empty = Index([])
268-
# self.assert_(empty is NULL_INDEX)
269-
# self.assert_(self.dateIndex[15:15] is NULL_INDEX)
270-
271266
def test_is_numeric(self):
272267
self.assert_(not self.dateIndex.is_numeric())
273268
self.assert_(not self.strIndex.is_numeric())
@@ -1466,10 +1461,9 @@ def test_factor_agg(self):
14661461

14671462

14681463
def test_get_combined_index():
1469-
from pandas.core.index import _get_combined_index, NULL_INDEX
1470-
1464+
from pandas.core.index import _get_combined_index
14711465
result = _get_combined_index([])
1472-
assert(result is NULL_INDEX)
1466+
assert(result.equals(Index([])))
14731467

14741468
if __name__ == '__main__':
14751469
import nose

pandas/tools/tests/test_merge.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,17 @@ def test_append_many(self):
836836
self.assert_((result['foo'][15:] == 'bar').all())
837837
self.assert_(result['foo'][:15].isnull().all())
838838

839+
def test_append_preserve_index_name(self):
840+
# #980
841+
df1 = DataFrame(data=None, columns=['A','B','C'])
842+
df1 = df1.set_index(['A'])
843+
df2 = DataFrame(data=[[1,4,7], [2,5,8], [3,6,9]],
844+
columns=['A','B','C'])
845+
df2 = df2.set_index(['A'])
846+
847+
result = df1.append(df2)
848+
self.assert_(result.index.name == 'A')
849+
839850
def test_join_many(self):
840851
df = DataFrame(np.random.randn(10, 6), columns=list('abcdef'))
841852
df_list = [df[['a', 'b']], df[['c', 'd']], df[['e', 'f']]]

0 commit comments

Comments
 (0)