Skip to content

Commit 602aa2a

Browse files
author
Matt Hagy
committed
Added a test for known inconsistent attribute/method names
1 parent 25f946b commit 602aa2a

File tree

1 file changed

+40
-34
lines changed

1 file changed

+40
-34
lines changed

pandas/tests/test_groupby.py

+40-34
Original file line numberDiff line numberDiff line change
@@ -5894,6 +5894,19 @@ def test_groupby_selection_with_methods(self):
58945894
assert_frame_equal(g.filter(lambda x: len(x) == 3),
58955895
g_exp.filter(lambda x: len(x) == 3))
58965896

5897+
# The methods returned by these attributes don't have a __name__ attribute
5898+
# that matches that attribute.
5899+
# TODO: Fix these inconsistencies
5900+
DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
5901+
'boxplot',
5902+
'bfill',
5903+
'ffill'
5904+
])
5905+
S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
5906+
'bfill',
5907+
'ffill'
5908+
])
5909+
58975910
def test_groupby_whitelist(self):
58985911
from string import ascii_lowercase
58995912
letters = np.array(list(ascii_lowercase))
@@ -5986,44 +5999,37 @@ def test_groupby_whitelist(self):
59865999
# 'nlargest', 'nsmallest',
59876000
])
59886001

5989-
# TODO: Fix these inconsistencies between attribute and method names
5990-
inconsistently_named = frozenset([
5991-
'tshift',
5992-
'any',
5993-
'dtypes',
5994-
'idxmax',
5995-
'all',
5996-
'fillna',
5997-
'rank',
5998-
'quantile',
5999-
'cummax',
6000-
'take',
6001-
'corr',
6002-
'cummin',
6003-
'diff',
6004-
'plot',
6005-
'pct_change',
6006-
'skew',
6007-
'hist',
6008-
'bfill',
6009-
'cov',
6010-
'boxplot',
6011-
'describe',
6012-
'corrwith',
6013-
'idxmin',
6014-
'ffill',
6015-
'mad',
6016-
'dtype',
6017-
'unique'
6018-
])
6019-
6020-
for obj, whitelist in zip((df, s), (df_whitelist, s_whitelist)):
6002+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
6003+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
6004+
for obj, whitelist, names_dont_match in zip((df, s), (df_whitelist, s_whitelist), names_dont_match_pair):
60216005
gb = obj.groupby(df.letters)
60226006
self.assertEqual(whitelist, gb._apply_whitelist)
60236007
for m in whitelist:
60246008
f = getattr(type(gb), m)
6025-
if m not in inconsistently_named:
6026-
self.assertEqual(f.__name__, m)
6009+
try:
6010+
n = f.__name__
6011+
except AttributeError:
6012+
continue
6013+
if m not in names_dont_match:
6014+
self.assertEqual(n, m)
6015+
6016+
def test_groupby_method_names_that_dont_match_attribute(self):
6017+
from string import ascii_lowercase
6018+
letters = np.array(list(ascii_lowercase))
6019+
N = 10
6020+
random_letters = letters.take(np.random.randint(0, 26, N))
6021+
df = DataFrame({'floats': N / 10 * Series(np.random.random(N)),
6022+
'letters': Series(random_letters)})
6023+
gb = df.groupby(df.letters)
6024+
s = df.floats
6025+
6026+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
6027+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
6028+
for obj, names_dont_match in zip((df, s), names_dont_match_pair):
6029+
gb = obj.groupby(df.letters)
6030+
for m in names_dont_match:
6031+
f = getattr(gb, m)
6032+
self.assertNotEqual(f.__name__, m)
60276033

60286034
AGG_FUNCTIONS = ['sum', 'prod', 'min', 'max', 'median', 'mean', 'skew',
60296035
'mad', 'std', 'var', 'sem']

0 commit comments

Comments
 (0)