Skip to content

Commit ac318d2

Browse files
simonjayhawkinsjreback
authored andcommitted
TST/CLN: empty DataFrames and some 'empty' Series (pandas-dev#25690)
1 parent 2beb1b4 commit ac318d2

18 files changed

+93
-45
lines changed

Diff for: pandas/tests/frame/test_arithmetic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ def test_arith_flex_zero_len_raises(self):
435435
# GH 19522 passing fill_value to frame flex arith methods should
436436
# raise even in the zero-length special cases
437437
ser_len0 = pd.Series([])
438-
df_len0 = pd.DataFrame([], columns=['A', 'B'])
438+
df_len0 = pd.DataFrame(columns=['A', 'B'])
439439
df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
440440

441441
with pytest.raises(NotImplementedError, match='fill_value'):

Diff for: pandas/tests/frame/test_combine_concat.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ def test_append_list_of_series_dicts(self):
170170
def test_append_empty_dataframe(self):
171171

172172
# Empty df append empty df
173-
df1 = DataFrame([])
174-
df2 = DataFrame([])
173+
df1 = DataFrame()
174+
df2 = DataFrame()
175175
result = df1.append(df2)
176176
expected = df1.copy()
177177
assert_frame_equal(result, expected)
@@ -581,18 +581,18 @@ def test_combine_first(self, float_frame):
581581
assert_series_equal(combined['A'].reindex(g.index), g['A'])
582582

583583
# corner cases
584-
comb = float_frame.combine_first(DataFrame({}))
584+
comb = float_frame.combine_first(DataFrame())
585585
assert_frame_equal(comb, float_frame)
586586

587-
comb = DataFrame({}).combine_first(float_frame)
587+
comb = DataFrame().combine_first(float_frame)
588588
assert_frame_equal(comb, float_frame)
589589

590590
comb = float_frame.combine_first(DataFrame(index=["faz", "boo"]))
591591
assert "faz" in comb.index
592592

593593
# #2525
594594
df = DataFrame({'a': [1]}, index=[datetime(2012, 1, 1)])
595-
df2 = DataFrame({}, columns=['b'])
595+
df2 = DataFrame(columns=['b'])
596596
result = df.combine_first(df2)
597597
assert 'b' in result
598598

Diff for: pandas/tests/frame/test_constructors.py

+34-10
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
import pandas as pd
1818
from pandas import (
19-
Categorical, DataFrame, Index, MultiIndex, Series, Timedelta, Timestamp,
20-
compat, date_range, isna)
19+
Categorical, DataFrame, Index, MultiIndex, RangeIndex, Series, Timedelta,
20+
Timestamp, compat, date_range, isna)
2121
from pandas.tests.frame.common import TestData
2222
import pandas.util.testing as tm
2323

@@ -28,12 +28,36 @@
2828

2929
class TestDataFrameConstructors(TestData):
3030

31-
def test_constructor(self):
32-
df = DataFrame()
33-
assert len(df.index) == 0
31+
@pytest.mark.parametrize('constructor', [
32+
lambda: DataFrame(),
33+
lambda: DataFrame(None),
34+
lambda: DataFrame({}),
35+
lambda: DataFrame(()),
36+
lambda: DataFrame([]),
37+
lambda: DataFrame((x for x in [])),
38+
lambda: DataFrame(data=None),
39+
lambda: DataFrame(data={}),
40+
lambda: DataFrame(data=()),
41+
lambda: DataFrame(data=[]),
42+
lambda: DataFrame(data=(x for x in []))
43+
])
44+
def test_empty_constructor(self, constructor):
45+
expected = DataFrame()
46+
result = constructor()
47+
assert len(result.index) == 0
48+
assert len(result.columns) == 0
49+
tm.assert_frame_equal(result, expected)
3450

35-
df = DataFrame(data={})
36-
assert len(df.index) == 0
51+
@pytest.mark.parametrize('emptylike,expected_index,expected_columns', [
52+
([[]], RangeIndex(1), RangeIndex(0)),
53+
([[], []], RangeIndex(2), RangeIndex(0)),
54+
([(x for x in [])], RangeIndex(1), RangeIndex(0))
55+
])
56+
def test_emptylike_constructor(
57+
self, emptylike, expected_index, expected_columns):
58+
expected = DataFrame(index=expected_index, columns=expected_columns)
59+
result = DataFrame(emptylike)
60+
tm.assert_frame_equal(result, expected)
3761

3862
def test_constructor_mixed(self):
3963
index, data = tm.getMixedTypeDict()
@@ -91,7 +115,7 @@ def test_constructor_dtype_list_data(self):
91115

92116
def test_constructor_list_frames(self):
93117
# see gh-3243
94-
result = DataFrame([DataFrame([])])
118+
result = DataFrame([DataFrame()])
95119
assert result.shape == (1, 0)
96120

97121
result = DataFrame([DataFrame(dict(A=lrange(5)))])
@@ -258,7 +282,7 @@ def test_constructor_dict(self):
258282
frame = DataFrame({}, index=idx)
259283
assert frame.index is idx
260284

261-
# empty with index and columns
285+
# empty dict with index and columns
262286
idx = Index([0, 1, 2])
263287
frame = DataFrame({}, index=idx, columns=idx)
264288
assert frame.index is idx
@@ -1105,7 +1129,7 @@ def test_constructor_list_of_series(self):
11051129
result2 = DataFrame(data, index=np.arange(6))
11061130
tm.assert_frame_equal(result, result2)
11071131

1108-
result = DataFrame([Series({})])
1132+
result = DataFrame([Series()])
11091133
expected = DataFrame(index=[0])
11101134
tm.assert_frame_equal(result, expected)
11111135

Diff for: pandas/tests/frame/test_reshape.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def test_pivot_duplicates(self):
5252
data.pivot('a', 'b', 'c')
5353

5454
def test_pivot_empty(self):
55-
df = DataFrame({}, columns=['a', 'b', 'c'])
55+
df = DataFrame(columns=['a', 'b', 'c'])
5656
result = df.pivot('a', 'b', 'c')
5757
expected = DataFrame()
5858
tm.assert_frame_equal(result, expected, check_names=False)

Diff for: pandas/tests/groupby/test_function.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1064,8 +1064,8 @@ def test_size(df):
10641064
tm.assert_series_equal(left, right, check_names=False)
10651065

10661066
# GH11699
1067-
df = DataFrame([], columns=['A', 'B'])
1068-
out = Series([], dtype='int64', index=Index([], name='A'))
1067+
df = DataFrame(columns=['A', 'B'])
1068+
out = Series(dtype='int64', index=Index([], name='A'))
10691069
tm.assert_series_equal(df.groupby('A').size(), out)
10701070

10711071

Diff for: pandas/tests/groupby/test_groupby.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ def f1(x):
296296
if y.empty:
297297
multiindex = MultiIndex(levels=[[]] * 2, codes=[[]] * 2,
298298
names=['b', 'c'])
299-
res = DataFrame(None, columns=['a'], index=multiindex)
299+
res = DataFrame(columns=['a'], index=multiindex)
300300
return res
301301
else:
302302
y = y.set_index(['b', 'c'])
@@ -315,7 +315,7 @@ def f3(x):
315315
if y.empty:
316316
multiindex = MultiIndex(levels=[[]] * 2, codes=[[]] * 2,
317317
names=['foo', 'bar'])
318-
res = DataFrame(None, columns=['a', 'b'], index=multiindex)
318+
res = DataFrame(columns=['a', 'b'], index=multiindex)
319319
return res
320320
else:
321321
return y

Diff for: pandas/tests/groupby/test_grouping.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ def test_groupby_with_single_column(self):
643643
df = pd.DataFrame({'a': list('abssbab')})
644644
tm.assert_frame_equal(df.groupby('a').get_group('a'), df.iloc[[0, 5]])
645645
# GH 13530
646-
exp = pd.DataFrame([], index=pd.Index(['a', 'b', 's'], name='a'))
646+
exp = pd.DataFrame(index=pd.Index(['a', 'b', 's'], name='a'))
647647
tm.assert_frame_equal(df.groupby('a').count(), exp)
648648
tm.assert_frame_equal(df.groupby('a').sum(), exp)
649649
tm.assert_frame_equal(df.groupby('a').nth(1), exp)

Diff for: pandas/tests/indexing/common.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ def setup_method(self, method):
8585
self.frame_ts_rev = DataFrame(np.random.randn(4, 4),
8686
index=dates_rev)
8787

88-
self.frame_empty = DataFrame({})
89-
self.series_empty = Series({})
88+
self.frame_empty = DataFrame()
89+
self.series_empty = Series()
9090

9191
# form agglomerates
9292
for o in self._objs:

Diff for: pandas/tests/io/json/test_json_table_schema.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def test_set_names_unset(self, idx, nm, prop):
459459
])
460460
def test_warns_non_roundtrippable_names(self, idx):
461461
# GH 19130
462-
df = pd.DataFrame([[]], index=idx)
462+
df = pd.DataFrame(index=idx)
463463
df.index.name = 'index'
464464
with tm.assert_produces_warning():
465465
set_default_names(df)
@@ -566,7 +566,7 @@ def test_multiindex(self, index_names):
566566

567567
def test_empty_frame_roundtrip(self):
568568
# GH 21287
569-
df = pd.DataFrame([], columns=['a', 'b', 'c'])
569+
df = pd.DataFrame(columns=['a', 'b', 'c'])
570570
expected = df.copy()
571571
out = df.to_json(orient='table')
572572
result = pd.read_json(out, orient='table')

Diff for: pandas/tests/io/json/test_pandas.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def setup(self, datapath):
5454
self.objSeries.name = 'objects'
5555

5656
self.empty_series = Series([], index=[])
57-
self.empty_frame = DataFrame({})
57+
self.empty_frame = DataFrame()
5858

5959
self.frame = _frame.copy()
6060
self.frame2 = _frame2.copy()

Diff for: pandas/tests/io/parser/test_common.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ def test_empty_with_index(all_parsers):
11371137
parser = all_parsers
11381138
result = parser.read_csv(StringIO(data), index_col=0)
11391139

1140-
expected = DataFrame([], columns=["y"], index=Index([], name="x"))
1140+
expected = DataFrame(columns=["y"], index=Index([], name="x"))
11411141
tm.assert_frame_equal(result, expected)
11421142

11431143

@@ -1147,7 +1147,7 @@ def test_empty_with_multi_index(all_parsers):
11471147
parser = all_parsers
11481148
result = parser.read_csv(StringIO(data), index_col=["x", "y"])
11491149

1150-
expected = DataFrame([], columns=["z"],
1150+
expected = DataFrame(columns=["z"],
11511151
index=MultiIndex.from_arrays(
11521152
[[]] * 2, names=["x", "y"]))
11531153
tm.assert_frame_equal(result, expected)
@@ -1158,7 +1158,7 @@ def test_empty_with_reversed_multi_index(all_parsers):
11581158
parser = all_parsers
11591159
result = parser.read_csv(StringIO(data), index_col=[1, 0])
11601160

1161-
expected = DataFrame([], columns=["z"],
1161+
expected = DataFrame(columns=["z"],
11621162
index=MultiIndex.from_arrays(
11631163
[[]] * 2, names=["y", "x"]))
11641164
tm.assert_frame_equal(result, expected)
@@ -1270,7 +1270,7 @@ def test_numeric_range_too_wide(all_parsers, exp_data):
12701270
def test_empty_with_nrows_chunksize(all_parsers, iterator):
12711271
# see gh-9535
12721272
parser = all_parsers
1273-
expected = DataFrame([], columns=["foo", "bar"])
1273+
expected = DataFrame(columns=["foo", "bar"])
12741274

12751275
nrows = 10
12761276
data = StringIO("foo,bar\n")

Diff for: pandas/tests/io/parser/test_index_col.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test_index_col_empty_data(all_parsers, index_col, kwargs):
105105
parser = all_parsers
106106
result = parser.read_csv(StringIO(data), index_col=index_col)
107107

108-
expected = DataFrame([], **kwargs)
108+
expected = DataFrame(**kwargs)
109109
tm.assert_frame_equal(result, expected)
110110

111111

@@ -115,7 +115,7 @@ def test_empty_with_index_col_false(all_parsers):
115115
parser = all_parsers
116116
result = parser.read_csv(StringIO(data), index_col=False)
117117

118-
expected = DataFrame([], columns=["x", "y"])
118+
expected = DataFrame(columns=["x", "y"])
119119
tm.assert_frame_equal(result, expected)
120120

121121

Diff for: pandas/tests/resample/test_period_index.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ def test_resample_with_only_nat(self):
715715
pi = PeriodIndex([pd.NaT] * 3, freq='S')
716716
frame = DataFrame([2, 3, 5], index=pi)
717717
expected_index = PeriodIndex(data=[], freq=pi.freq)
718-
expected = DataFrame([], index=expected_index)
718+
expected = DataFrame(index=expected_index)
719719
result = frame.resample('1s').mean()
720720
assert_frame_equal(result, expected)
721721

Diff for: pandas/tests/reshape/merge/test_merge.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -386,10 +386,10 @@ def test_left_merge_empty_dataframe(self):
386386
dict(left_on='a', right_on='x')])
387387
def test_merge_left_empty_right_empty(self, join_type, kwarg):
388388
# GH 10824
389-
left = pd.DataFrame([], columns=['a', 'b', 'c'])
390-
right = pd.DataFrame([], columns=['x', 'y', 'z'])
389+
left = pd.DataFrame(columns=['a', 'b', 'c'])
390+
right = pd.DataFrame(columns=['x', 'y', 'z'])
391391

392-
exp_in = pd.DataFrame([], columns=['a', 'b', 'c', 'x', 'y', 'z'],
392+
exp_in = pd.DataFrame(columns=['a', 'b', 'c', 'x', 'y', 'z'],
393393
index=pd.Index([], dtype=object),
394394
dtype=object)
395395

@@ -398,7 +398,7 @@ def test_merge_left_empty_right_empty(self, join_type, kwarg):
398398

399399
def test_merge_left_empty_right_notempty(self):
400400
# GH 10824
401-
left = pd.DataFrame([], columns=['a', 'b', 'c'])
401+
left = pd.DataFrame(columns=['a', 'b', 'c'])
402402
right = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
403403
columns=['x', 'y', 'z'])
404404

@@ -444,7 +444,7 @@ def test_merge_left_notempty_right_empty(self):
444444
# GH 10824
445445
left = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
446446
columns=['a', 'b', 'c'])
447-
right = pd.DataFrame([], columns=['x', 'y', 'z'])
447+
right = pd.DataFrame(columns=['x', 'y', 'z'])
448448

449449
exp_out = pd.DataFrame({'a': [1, 4, 7],
450450
'b': [2, 5, 8],

Diff for: pandas/tests/reshape/test_concat.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ def test_append(self, sort):
766766
mixed_appended2.reindex(columns=['A', 'B', 'C', 'D']))
767767

768768
# append empty
769-
empty = DataFrame({})
769+
empty = DataFrame()
770770

771771
appended = self.frame.append(empty)
772772
tm.assert_frame_equal(self.frame, appended)
@@ -868,7 +868,7 @@ def test_append_many(self, sort):
868868

869869
def test_append_preserve_index_name(self):
870870
# #980
871-
df1 = DataFrame(data=None, columns=['A', 'B', 'C'])
871+
df1 = DataFrame(columns=['A', 'B', 'C'])
872872
df1 = df1.set_index(['A'])
873873
df2 = DataFrame(data=[[1, 4, 7], [2, 5, 8], [3, 6, 9]],
874874
columns=['A', 'B', 'C'])

Diff for: pandas/tests/series/test_constructors.py

+25-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,30 @@
2828

2929
class TestSeriesConstructors(object):
3030

31+
@pytest.mark.parametrize('constructor,check_index_type', [
32+
# NOTE: some overlap with test_constructor_empty but that test does not
33+
# test for None or an empty generator.
34+
# test_constructor_pass_none tests None but only with the index also
35+
# passed.
36+
(lambda: Series(), True),
37+
(lambda: Series(None), True),
38+
(lambda: Series({}), True),
39+
(lambda: Series(()), False), # creates a RangeIndex
40+
(lambda: Series([]), False), # creates a RangeIndex
41+
(lambda: Series((x for x in [])), False), # creates a RangeIndex
42+
(lambda: Series(data=None), True),
43+
(lambda: Series(data={}), True),
44+
(lambda: Series(data=()), False), # creates a RangeIndex
45+
(lambda: Series(data=[]), False), # creates a RangeIndex
46+
(lambda: Series(data=(x for x in [])), False), # creates a RangeIndex
47+
])
48+
def test_empty_constructor(self, constructor, check_index_type):
49+
expected = Series()
50+
result = constructor()
51+
assert len(result.index) == 0
52+
tm.assert_series_equal(result, expected,
53+
check_index_type=check_index_type)
54+
3155
def test_invalid_dtype(self):
3256
# GH15520
3357
msg = 'not understood'
@@ -65,7 +89,7 @@ def test_constructor(self, datetime_series):
6589
assert mixed[1] is np.NaN
6690

6791
assert not empty_series.index.is_all_dates
68-
assert not Series({}).index.is_all_dates
92+
assert not Series().index.is_all_dates
6993

7094
# exception raised is of type Exception
7195
with pytest.raises(Exception, match="Data must be 1-dimensional"):

Diff for: pandas/tests/test_multilevel.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ def test_count_level_corner(self):
313313

314314
df = self.frame[:0]
315315
result = df.count(level=0)
316-
expected = DataFrame({}, index=s.index.levels[0],
316+
expected = DataFrame(index=s.index.levels[0],
317317
columns=df.columns).fillna(0).astype(np.int64)
318318
tm.assert_frame_equal(result, expected)
319319

Diff for: pandas/tests/test_strings.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1792,7 +1792,7 @@ def test_empty_str_methods(self):
17921792

17931793
def test_empty_str_methods_to_frame(self):
17941794
empty = Series(dtype=str)
1795-
empty_df = DataFrame([])
1795+
empty_df = DataFrame()
17961796
tm.assert_frame_equal(empty_df, empty.str.partition('a'))
17971797
tm.assert_frame_equal(empty_df, empty.str.rpartition('a'))
17981798

@@ -2356,7 +2356,7 @@ def test_split_blank_string(self):
23562356
# expand blank split GH 20067
23572357
values = Series([''], name='test')
23582358
result = values.str.split(expand=True)
2359-
exp = DataFrame([[]])
2359+
exp = DataFrame([[]]) # NOTE: this is NOT an empty DataFrame
23602360
tm.assert_frame_equal(result, exp)
23612361

23622362
values = Series(['a b c', 'a b', '', ' '], name='test')

0 commit comments

Comments
 (0)