Skip to content

Commit 68013bf

Browse files
Matt Hagyjreback
Matt Hagy
authored andcommitted
Added a test for known inconsistent attribute/method names
1 parent 3bf8993 commit 68013bf

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
@@ -3753,6 +3753,19 @@ def test_groupby_selection_with_methods(self):
37533753
assert_frame_equal(g.filter(lambda x: len(x) == 3),
37543754
g_exp.filter(lambda x: len(x) == 3))
37553755

3756+
# The methods returned by these attributes don't have a __name__ attribute
3757+
# that matches that attribute.
3758+
# TODO: Fix these inconsistencies
3759+
DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
3760+
'boxplot',
3761+
'bfill',
3762+
'ffill'
3763+
])
3764+
S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
3765+
'bfill',
3766+
'ffill'
3767+
])
3768+
37563769
def test_groupby_whitelist(self):
37573770
from string import ascii_lowercase
37583771
letters = np.array(list(ascii_lowercase))
@@ -3836,44 +3849,37 @@ def test_groupby_whitelist(self):
38363849
'nsmallest',
38373850
])
38383851

3839-
# TODO: Fix these inconsistencies between attribute and method names
3840-
inconsistently_named = frozenset([
3841-
'tshift',
3842-
'any',
3843-
'dtypes',
3844-
'idxmax',
3845-
'all',
3846-
'fillna',
3847-
'rank',
3848-
'quantile',
3849-
'cummax',
3850-
'take',
3851-
'corr',
3852-
'cummin',
3853-
'diff',
3854-
'plot',
3855-
'pct_change',
3856-
'skew',
3857-
'hist',
3858-
'bfill',
3859-
'cov',
3860-
'boxplot',
3861-
'describe',
3862-
'corrwith',
3863-
'idxmin',
3864-
'ffill',
3865-
'mad',
3866-
'dtype',
3867-
'unique'
3868-
])
3869-
3870-
for obj, whitelist in zip((df, s), (df_whitelist, s_whitelist)):
3852+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
3853+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
3854+
for obj, whitelist, names_dont_match in zip((df, s), (df_whitelist, s_whitelist), names_dont_match_pair):
38713855
gb = obj.groupby(df.letters)
38723856
self.assertEqual(whitelist, gb._apply_whitelist)
38733857
for m in whitelist:
38743858
f = getattr(type(gb), m)
3875-
if m not in inconsistently_named:
3876-
self.assertEqual(f.__name__, m)
3859+
try:
3860+
n = f.__name__
3861+
except AttributeError:
3862+
continue
3863+
if m not in names_dont_match:
3864+
self.assertEqual(n, m)
3865+
3866+
def test_groupby_method_names_that_dont_match_attribute(self):
3867+
from string import ascii_lowercase
3868+
letters = np.array(list(ascii_lowercase))
3869+
N = 10
3870+
random_letters = letters.take(np.random.randint(0, 26, N))
3871+
df = DataFrame({'floats': N / 10 * Series(np.random.random(N)),
3872+
'letters': Series(random_letters)})
3873+
gb = df.groupby(df.letters)
3874+
s = df.floats
3875+
3876+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
3877+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
3878+
for obj, names_dont_match in zip((df, s), names_dont_match_pair):
3879+
gb = obj.groupby(df.letters)
3880+
for m in names_dont_match:
3881+
f = getattr(gb, m)
3882+
self.assertNotEqual(f.__name__, m)
38773883

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

0 commit comments

Comments
 (0)