Skip to content

Commit 8852e6d

Browse files
author
Matt Hagy
committed
Added a test for known inconsistent attribute/method names
1 parent 725b7a5 commit 8852e6d

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
@@ -4938,6 +4938,19 @@ def test_groupby_selection_with_methods(self):
49384938
assert_frame_equal(g.filter(lambda x: len(x) == 3),
49394939
g_exp.filter(lambda x: len(x) == 3))
49404940

4941+
# The methods returned by these attributes don't have a __name__ attribute
4942+
# that matches that attribute.
4943+
# TODO: Fix these inconsistencies
4944+
DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
4945+
'boxplot',
4946+
'bfill',
4947+
'ffill'
4948+
])
4949+
S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE = frozenset([
4950+
'bfill',
4951+
'ffill'
4952+
])
4953+
49414954
def test_groupby_whitelist(self):
49424955
from string import ascii_lowercase
49434956
letters = np.array(list(ascii_lowercase))
@@ -5030,44 +5043,37 @@ def test_groupby_whitelist(self):
50305043
# 'nlargest', 'nsmallest',
50315044
])
50325045

5033-
# TODO: Fix these inconsistencies between attribute and method names
5034-
inconsistently_named = frozenset([
5035-
'tshift',
5036-
'any',
5037-
'dtypes',
5038-
'idxmax',
5039-
'all',
5040-
'fillna',
5041-
'rank',
5042-
'quantile',
5043-
'cummax',
5044-
'take',
5045-
'corr',
5046-
'cummin',
5047-
'diff',
5048-
'plot',
5049-
'pct_change',
5050-
'skew',
5051-
'hist',
5052-
'bfill',
5053-
'cov',
5054-
'boxplot',
5055-
'describe',
5056-
'corrwith',
5057-
'idxmin',
5058-
'ffill',
5059-
'mad',
5060-
'dtype',
5061-
'unique'
5062-
])
5063-
5064-
for obj, whitelist in zip((df, s), (df_whitelist, s_whitelist)):
5046+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
5047+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
5048+
for obj, whitelist, names_dont_match in zip((df, s), (df_whitelist, s_whitelist), names_dont_match_pair):
50655049
gb = obj.groupby(df.letters)
50665050
self.assertEqual(whitelist, gb._apply_whitelist)
50675051
for m in whitelist:
50685052
f = getattr(type(gb), m)
5069-
if m not in inconsistently_named:
5070-
self.assertEqual(f.__name__, m)
5053+
try:
5054+
n = f.__name__
5055+
except AttributeError:
5056+
continue
5057+
if m not in names_dont_match:
5058+
self.assertEqual(n, m)
5059+
5060+
def test_groupby_method_names_that_dont_match_attribute(self):
5061+
from string import ascii_lowercase
5062+
letters = np.array(list(ascii_lowercase))
5063+
N = 10
5064+
random_letters = letters.take(np.random.randint(0, 26, N))
5065+
df = DataFrame({'floats': N / 10 * Series(np.random.random(N)),
5066+
'letters': Series(random_letters)})
5067+
gb = df.groupby(df.letters)
5068+
s = df.floats
5069+
5070+
names_dont_match_pair = (self.DF_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE,
5071+
self.S_METHOD_NAMES_THAT_DONT_MATCH_ATTRIBUTE)
5072+
for obj, names_dont_match in zip((df, s), names_dont_match_pair):
5073+
gb = obj.groupby(df.letters)
5074+
for m in names_dont_match:
5075+
f = getattr(gb, m)
5076+
self.assertNotEqual(f.__name__, m)
50715077

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

0 commit comments

Comments
 (0)