Skip to content

Commit b65a0e2

Browse files
author
Matt Hagy
committed
Added a test for known inconsistent attribute/method names
1 parent 04cf626 commit b65a0e2

File tree

1 file changed

+40
-34
lines changed

1 file changed

+40
-34
lines changed

pandas/tests/groupby/test_groupby.py

+40-34
Original file line numberDiff line numberDiff line change
@@ -5129,6 +5129,19 @@ def test_groupby_selection_with_methods(self):
51295129
assert_frame_equal(g.filter(lambda x: len(x) == 3),
51305130
g_exp.filter(lambda x: len(x) == 3))
51315131

5132+
# The methods returned by these attributes don't have a __name__ attribute
5133+
# that matches that attribute.
5134+
# TODO: Fix these inconsistencies
5135+
DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
5136+
'boxplot',
5137+
'bfill',
5138+
'ffill'
5139+
])
5140+
S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
5141+
'bfill',
5142+
'ffill'
5143+
])
5144+
51325145
def test_groupby_whitelist(self):
51335146
from string import ascii_lowercase
51345147
letters = np.array(list(ascii_lowercase))
@@ -5213,44 +5226,37 @@ def test_groupby_whitelist(self):
52135226
# 'nlargest', 'nsmallest',
52145227
])
52155228

5216-
# TODO: Fix these inconsistencies between attribute and method names
5217-
inconsistently_named = frozenset([
5218-
'tshift',
5219-
'any',
5220-
'dtypes',
5221-
'idxmax',
5222-
'all',
5223-
'fillna',
5224-
'rank',
5225-
'quantile',
5226-
'cummax',
5227-
'take',
5228-
'corr',
5229-
'cummin',
5230-
'diff',
5231-
'plot',
5232-
'pct_change',
5233-
'skew',
5234-
'hist',
5235-
'bfill',
5236-
'cov',
5237-
'boxplot',
5238-
'describe',
5239-
'corrwith',
5240-
'idxmin',
5241-
'ffill',
5242-
'mad',
5243-
'dtype',
5244-
'unique'
5245-
])
5246-
5247-
for obj, whitelist in zip((df, s), (df_whitelist, s_whitelist)):
5229+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
5230+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
5231+
for obj, whitelist, names_dont_match in zip((df, s), (df_whitelist, s_whitelist), names_dont_match_pair):
52485232
gb = obj.groupby(df.letters)
52495233
self.assertEqual(whitelist, gb._apply_whitelist)
52505234
for m in whitelist:
52515235
f = getattr(type(gb), m)
5252-
if m not in inconsistently_named:
5253-
self.assertEqual(f.__name__, m)
5236+
try:
5237+
n = f.__name__
5238+
except AttributeError:
5239+
continue
5240+
if m not in names_dont_match:
5241+
self.assertEqual(n, m)
5242+
5243+
def test_groupby_method_names_that_dont_match_attribute(self):
5244+
from string import ascii_lowercase
5245+
letters = np.array(list(ascii_lowercase))
5246+
N = 10
5247+
random_letters = letters.take(np.random.randint(0, 26, N))
5248+
df = DataFrame({'floats': N / 10 * Series(np.random.random(N)),
5249+
'letters': Series(random_letters)})
5250+
gb = df.groupby(df.letters)
5251+
s = df.floats
5252+
5253+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
5254+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
5255+
for obj, names_dont_match in zip((df, s), names_dont_match_pair):
5256+
gb = obj.groupby(df.letters)
5257+
for m in names_dont_match:
5258+
f = getattr(gb, m)
5259+
self.assertNotEqual(f.__name__, m)
52545260

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

0 commit comments

Comments
 (0)