{"action":"created","comment":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/233251941","pull_request_review_id":174620388,"id":233251941,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMzI1MTk0MQ==","diff_hunk":"@@ -34,11 +173,139 @@ def test_api(self):\n         assert Series.str is strings.StringMethods\n         assert isinstance(Series(['']).str, strings.StringMethods)\n \n-        # GH 9184\n-        invalid = Series([1])\n-        with pytest.raises(AttributeError, match=\"only use .str accessor\"):\n-            invalid.str\n-        assert not hasattr(invalid, 'str')\n+    @pytest.mark.parametrize('dtype', [object, 'category'])\n+    @pytest.mark.parametrize('box', [Series, Index])\n+    def test_api_per_dtype(self, box, dtype, any_skipna_inferred_dtype):\n+        # one instance of parametrized fixture\n+        inferred_dtype, values = any_skipna_inferred_dtype\n+\n+        t = box(values, dtype=dtype)  # explicit dtype to avoid casting\n+\n+        # TODO: get rid of these xfails\n+        if dtype == 'category' and inferred_dtype in ['period', 'interval']:\n+            pytest.xfail(reason='Conversion to numpy array fails because '\n+                         'the ._values-attribute is not a numpy array for '\n+                         'PeriodArray/IntervalArray; see GH 23553')\n+        if box == Index and inferred_dtype in ['empty', 'bytes']:\n+            pytest.xfail(reason='Raising too restrictively; '\n+                         'solved by GH 23167')\n+        if (box == Index and dtype == object\n+                and inferred_dtype in ['boolean', 'date', 'time']):\n+            pytest.xfail(reason='Inferring incorrectly because of NaNs; '\n+                         'solved by GH 23167')\n+        if (box == Series\n+                and (dtype == object and inferred_dtype not in [\n+                    'string', 'unicode', 'empty',\n+                    'bytes', 'mixed', 'mixed-integer'])\n+                or (dtype == 'category'\n+                    and inferred_dtype in ['decimal', 'boolean', 'time'])):\n+            pytest.xfail(reason='Not raising correctly; solved by GH 23167')\n+\n+        types_passing_constructor = ['string', 'unicode', 'empty',\n+                                     'bytes', 'mixed', 'mixed-integer']\n+        if inferred_dtype in types_passing_constructor:\n+            # GH 6106\n+            assert isinstance(t.str, strings.StringMethods)\n+        else:\n+            # GH 9184, GH 23011, GH 23163\n+            with pytest.raises(AttributeError, match='Can only use .str '\n+                               'accessor with string values.*'):\n+                t.str\n+            assert not hasattr(t, 'str')\n+\n+    @pytest.mark.xfail(reason='not correctly raising on master; '\n+                       'solved by GH 23167')\n+    def test_api_mi_raises(self):\n+        mi = MultiIndex.from_arrays([['a', 'b', 'c']])\n+        with pytest.raises(AttributeError, match='Can only use .str accessor '\n+                           'with Index, not MultiIndex'):\n+            mi.str\n+        assert not hasattr(mi, 'str')\n+\n+    @pytest.mark.parametrize('dtype', [object, 'category'])\n+    @pytest.mark.parametrize('box', [Series, Index])\n+    def test_api_per_method(self, box, dtype,\n+                            any_allowed_skipna_inferred_dtype,\n+                            any_string_method):\n+        # this test does not check correctness of the different methods,\n+        # just that the methods work on the specified (inferred) dtypes,\n+        # and raise on all others\n+\n+        # one instance of each parametrized fixture\n+        inferred_dtype, values = any_allowed_skipna_inferred_dtype\n+        method_name, args, kwargs = any_string_method\n+\n+        # TODO: get rid of these xfails\n+        if (method_name not in ['encode', 'decode', 'len']\n+                and inferred_dtype == 'bytes'):\n+            pytest.xfail(reason='Not raising for \"bytes\", see GH 23011;'\n+                         'Also: malformed method names, see GH 23551; '\n+                         'solved by GH 23167')\n+        if (method_name == 'cat'\n+                and inferred_dtype in ['mixed', 'mixed-integer']):\n+            pytest.xfail(reason='Bad error message; should raise better; '\n+                         'solved by GH 23167')\n+        if box == Index and inferred_dtype in ['empty', 'bytes']:\n+            pytest.xfail(reason='Raising too restrictively; '\n+                         'solved by GH 23167')\n+        if (box == Index and dtype == object\n+                and inferred_dtype in ['boolean', 'date', 'time']):\n+            pytest.xfail(reason='Inferring incorrectly because of NaNs; '\n+                         'solved by GH 23167')\n+        if box == Index and dtype == 'category':\n+            pytest.xfail(reason='Broken methods on CategoricalIndex; '\n+                         'see GH 23556')\n+        if (method_name in ['partition', 'rpartition'] and box == Index\n+                and inferred_dtype != 'bytes'):\n+            pytest.xfail(reason='Method not nan-safe on Index; see GH 23558')\n+        if (method_name == 'split' and box == Index\n+                and inferred_dtype in ['mixed', 'mixed-integer']\n+                and dtype == object and kwargs.get('expand', None) == True):\n+            pytest.xfail(reason='Method not nan-safe on Index; see GH 23677')\n+\n+        t = box(values, dtype=dtype)  # explicit dtype to avoid casting\n+        method = getattr(t.str, method_name)\n+\n+        bytes_allowed = method_name in ['encode', 'decode', 'len']\n+        # as of v0.23.4, all methods except 'cat' are very lenient with the\n+        # allowed data types, just returning NaN for entries that error.\n+        # This could be changed with an 'errors'-kwarg to the `str`-accessor,\n+        # see discussion in GH 13877\n+        mixed_allowed = method_name not in ['cat']\n+\n+        allowed_types = (['string', 'unicode', 'empty']\n+                         + ['bytes'] * bytes_allowed\n+                         + ['mixed', 'mixed-integer'] * mixed_allowed)\n+\n+        if inferred_dtype in allowed_types:\n+            method(*args, **kwargs)  # works!\n+        else:\n+            # GH 23011, GH 23163\n+            msg = ('Cannot use .str.{name} with values of inferred dtype '\n+                   '{inferred_dtype!r}.'.format(name=method_name,\n+                                                inferred_dtype=inferred_dtype))\n+            with pytest.raises(TypeError, match=msg):\n+                method(*args, **kwargs)\n+\n+    def test_api_for_categorical(self, any_string_method):","path":"pandas/tests/test_strings.py","position":276,"original_position":276,"commit_id":"9f17f93272ddd3c672793b6b17d5b84c47192f8e","original_commit_id":"9f17f93272ddd3c672793b6b17d5b84c47192f8e","user":{"login":"h-vetinari","id":33685575,"node_id":"MDQ6VXNlcjMzNjg1NTc1","avatar_url":"https://avatars1.githubusercontent.com/u/33685575?v=4","gravatar_id":"","url":"https://api.github.com/users/h-vetinari","html_url":"https://github.com/h-vetinari","followers_url":"https://api.github.com/users/h-vetinari/followers","following_url":"https://api.github.com/users/h-vetinari/following{/other_user}","gists_url":"https://api.github.com/users/h-vetinari/gists{/gist_id}","starred_url":"https://api.github.com/users/h-vetinari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h-vetinari/subscriptions","organizations_url":"https://api.github.com/users/h-vetinari/orgs","repos_url":"https://api.github.com/users/h-vetinari/repos","events_url":"https://api.github.com/users/h-vetinari/events{/privacy}","received_events_url":"https://api.github.com/users/h-vetinari/received_events","type":"User","site_admin":false},"body":"These are the remnants of `test_str_accessor_api_for_categorical` after parametrization.","created_at":"2018-11-13T22:43:20Z","updated_at":"2018-11-13T22:48:07Z","html_url":"https://github.com/pandas-dev/pandas/pull/23582#discussion_r233251941","pull_request_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/233251941"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/23582#discussion_r233251941"},"pull_request":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582"}}},"pull_request":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582","id":229521884,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI5NTIxODg0","html_url":"https://github.com/pandas-dev/pandas/pull/23582","diff_url":"https://github.com/pandas-dev/pandas/pull/23582.diff","patch_url":"https://github.com/pandas-dev/pandas/pull/23582.patch","issue_url":"https://api.github.com/repos/pandas-dev/pandas/issues/23582","number":23582,"state":"open","locked":false,"title":"TST: add method/dtype coverage to str-accessor; precursor to #23167","user":{"login":"h-vetinari","id":33685575,"node_id":"MDQ6VXNlcjMzNjg1NTc1","avatar_url":"https://avatars1.githubusercontent.com/u/33685575?v=4","gravatar_id":"","url":"https://api.github.com/users/h-vetinari","html_url":"https://github.com/h-vetinari","followers_url":"https://api.github.com/users/h-vetinari/followers","following_url":"https://api.github.com/users/h-vetinari/following{/other_user}","gists_url":"https://api.github.com/users/h-vetinari/gists{/gist_id}","starred_url":"https://api.github.com/users/h-vetinari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h-vetinari/subscriptions","organizations_url":"https://api.github.com/users/h-vetinari/orgs","repos_url":"https://api.github.com/users/h-vetinari/repos","events_url":"https://api.github.com/users/h-vetinari/events{/privacy}","received_events_url":"https://api.github.com/users/h-vetinari/received_events","type":"User","site_admin":false},"body":"- [x] PRECURSOR to #23167\r\n- [x] tests added / passed / xfailed\r\n- [x] passes `git diff upstream/master -u -- \"*.py\" | flake8 --diff`\r\n\r\nThe effort to test all methods of the `.str`-accessor against all inferred data types in #23167 unearthed a bunch of bugs. However, that PR is getting quite unwieldy, and since @jreback much prefers single-purpose PRs (and in the spirit of test-driven development), I'm splitting off just the addition of the parametrized fixtures / tests, with *lots* of `xfails` that will be removed by #23167 and subsequent PRs.\r\n","created_at":"2018-11-08T21:57:24Z","updated_at":"2018-11-13T22:48:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3e317a004d1008d6fdf577a5ed9e641db5f8c2ac","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":57522093,"node_id":"MDU6TGFiZWw1NzUyMjA5Mw==","url":"https://api.github.com/repos/pandas-dev/pandas/labels/Strings","name":"Strings","color":"5319e7","default":false},{"id":127685,"node_id":"MDU6TGFiZWwxMjc2ODU=","url":"https://api.github.com/repos/pandas-dev/pandas/labels/Testing","name":"Testing","color":"C4A000","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582/commits","review_comments_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582/comments","review_comment_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pandas-dev/pandas/issues/23582/comments","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/9f17f93272ddd3c672793b6b17d5b84c47192f8e","head":{"label":"h-vetinari:str_coverage","ref":"str_coverage","sha":"9f17f93272ddd3c672793b6b17d5b84c47192f8e","user":{"login":"h-vetinari","id":33685575,"node_id":"MDQ6VXNlcjMzNjg1NTc1","avatar_url":"https://avatars1.githubusercontent.com/u/33685575?v=4","gravatar_id":"","url":"https://api.github.com/users/h-vetinari","html_url":"https://github.com/h-vetinari","followers_url":"https://api.github.com/users/h-vetinari/followers","following_url":"https://api.github.com/users/h-vetinari/following{/other_user}","gists_url":"https://api.github.com/users/h-vetinari/gists{/gist_id}","starred_url":"https://api.github.com/users/h-vetinari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h-vetinari/subscriptions","organizations_url":"https://api.github.com/users/h-vetinari/orgs","repos_url":"https://api.github.com/users/h-vetinari/repos","events_url":"https://api.github.com/users/h-vetinari/events{/privacy}","received_events_url":"https://api.github.com/users/h-vetinari/received_events","type":"User","site_admin":false},"repo":{"id":125207159,"node_id":"MDEwOlJlcG9zaXRvcnkxMjUyMDcxNTk=","name":"pandas","full_name":"h-vetinari/pandas","private":false,"owner":{"login":"h-vetinari","id":33685575,"node_id":"MDQ6VXNlcjMzNjg1NTc1","avatar_url":"https://avatars1.githubusercontent.com/u/33685575?v=4","gravatar_id":"","url":"https://api.github.com/users/h-vetinari","html_url":"https://github.com/h-vetinari","followers_url":"https://api.github.com/users/h-vetinari/followers","following_url":"https://api.github.com/users/h-vetinari/following{/other_user}","gists_url":"https://api.github.com/users/h-vetinari/gists{/gist_id}","starred_url":"https://api.github.com/users/h-vetinari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h-vetinari/subscriptions","organizations_url":"https://api.github.com/users/h-vetinari/orgs","repos_url":"https://api.github.com/users/h-vetinari/repos","events_url":"https://api.github.com/users/h-vetinari/events{/privacy}","received_events_url":"https://api.github.com/users/h-vetinari/received_events","type":"User","site_admin":false},"html_url":"https://github.com/h-vetinari/pandas","description":"Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more","fork":true,"url":"https://api.github.com/repos/h-vetinari/pandas","forks_url":"https://api.github.com/repos/h-vetinari/pandas/forks","keys_url":"https://api.github.com/repos/h-vetinari/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/h-vetinari/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/h-vetinari/pandas/teams","hooks_url":"https://api.github.com/repos/h-vetinari/pandas/hooks","issue_events_url":"https://api.github.com/repos/h-vetinari/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/h-vetinari/pandas/events","assignees_url":"https://api.github.com/repos/h-vetinari/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/h-vetinari/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/h-vetinari/pandas/tags","blobs_url":"https://api.github.com/repos/h-vetinari/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/h-vetinari/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/h-vetinari/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/h-vetinari/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/h-vetinari/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/h-vetinari/pandas/languages","stargazers_url":"https://api.github.com/repos/h-vetinari/pandas/stargazers","contributors_url":"https://api.github.com/repos/h-vetinari/pandas/contributors","subscribers_url":"https://api.github.com/repos/h-vetinari/pandas/subscribers","subscription_url":"https://api.github.com/repos/h-vetinari/pandas/subscription","commits_url":"https://api.github.com/repos/h-vetinari/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/h-vetinari/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/h-vetinari/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/h-vetinari/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/h-vetinari/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/h-vetinari/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/h-vetinari/pandas/merges","archive_url":"https://api.github.com/repos/h-vetinari/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/h-vetinari/pandas/downloads","issues_url":"https://api.github.com/repos/h-vetinari/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/h-vetinari/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/h-vetinari/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/h-vetinari/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/h-vetinari/pandas/labels{/name}","releases_url":"https://api.github.com/repos/h-vetinari/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/h-vetinari/pandas/deployments","created_at":"2018-03-14T12:12:19Z","updated_at":"2018-11-13T22:04:41Z","pushed_at":"2018-11-13T22:25:08Z","git_url":"git://github.com/h-vetinari/pandas.git","ssh_url":"git@github.com:h-vetinari/pandas.git","clone_url":"https://github.com/h-vetinari/pandas.git","svn_url":"https://github.com/h-vetinari/pandas","homepage":"http://pandas.pydata.org","size":135556,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pandas-dev:master","ref":"master","sha":"a197837c4067469478b13e491a21b58cb78ed165","user":{"login":"pandas-dev","id":21206976,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMjA2OTc2","avatar_url":"https://avatars2.githubusercontent.com/u/21206976?v=4","gravatar_id":"","url":"https://api.github.com/users/pandas-dev","html_url":"https://github.com/pandas-dev","followers_url":"https://api.github.com/users/pandas-dev/followers","following_url":"https://api.github.com/users/pandas-dev/following{/other_user}","gists_url":"https://api.github.com/users/pandas-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/pandas-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pandas-dev/subscriptions","organizations_url":"https://api.github.com/users/pandas-dev/orgs","repos_url":"https://api.github.com/users/pandas-dev/repos","events_url":"https://api.github.com/users/pandas-dev/events{/privacy}","received_events_url":"https://api.github.com/users/pandas-dev/received_events","type":"Organization","site_admin":false},"repo":{"id":858127,"node_id":"MDEwOlJlcG9zaXRvcnk4NTgxMjc=","name":"pandas","full_name":"pandas-dev/pandas","private":false,"owner":{"login":"pandas-dev","id":21206976,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMjA2OTc2","avatar_url":"https://avatars2.githubusercontent.com/u/21206976?v=4","gravatar_id":"","url":"https://api.github.com/users/pandas-dev","html_url":"https://github.com/pandas-dev","followers_url":"https://api.github.com/users/pandas-dev/followers","following_url":"https://api.github.com/users/pandas-dev/following{/other_user}","gists_url":"https://api.github.com/users/pandas-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/pandas-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pandas-dev/subscriptions","organizations_url":"https://api.github.com/users/pandas-dev/orgs","repos_url":"https://api.github.com/users/pandas-dev/repos","events_url":"https://api.github.com/users/pandas-dev/events{/privacy}","received_events_url":"https://api.github.com/users/pandas-dev/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/pandas-dev/pandas","description":"Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more","fork":false,"url":"https://api.github.com/repos/pandas-dev/pandas","forks_url":"https://api.github.com/repos/pandas-dev/pandas/forks","keys_url":"https://api.github.com/repos/pandas-dev/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pandas-dev/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pandas-dev/pandas/teams","hooks_url":"https://api.github.com/repos/pandas-dev/pandas/hooks","issue_events_url":"https://api.github.com/repos/pandas-dev/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/pandas-dev/pandas/events","assignees_url":"https://api.github.com/repos/pandas-dev/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/pandas-dev/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/pandas-dev/pandas/tags","blobs_url":"https://api.github.com/repos/pandas-dev/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pandas-dev/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pandas-dev/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/pandas-dev/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/pandas-dev/pandas/languages","stargazers_url":"https://api.github.com/repos/pandas-dev/pandas/stargazers","contributors_url":"https://api.github.com/repos/pandas-dev/pandas/contributors","subscribers_url":"https://api.github.com/repos/pandas-dev/pandas/subscribers","subscription_url":"https://api.github.com/repos/pandas-dev/pandas/subscription","commits_url":"https://api.github.com/repos/pandas-dev/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/pandas-dev/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/pandas-dev/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/pandas-dev/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/pandas-dev/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/pandas-dev/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pandas-dev/pandas/merges","archive_url":"https://api.github.com/repos/pandas-dev/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pandas-dev/pandas/downloads","issues_url":"https://api.github.com/repos/pandas-dev/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/pandas-dev/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/pandas-dev/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/pandas-dev/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pandas-dev/pandas/labels{/name}","releases_url":"https://api.github.com/repos/pandas-dev/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/pandas-dev/pandas/deployments","created_at":"2010-08-24T01:37:33Z","updated_at":"2018-11-13T21:34:13Z","pushed_at":"2018-11-13T22:42:37Z","git_url":"git://github.com/pandas-dev/pandas.git","ssh_url":"git@github.com:pandas-dev/pandas.git","clone_url":"https://github.com/pandas-dev/pandas.git","svn_url":"https://github.com/pandas-dev/pandas","homepage":"https://pandas.pydata.org","size":135456,"stargazers_count":16849,"watchers_count":16849,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":6810,"mirror_url":null,"archived":false,"open_issues_count":2874,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":6810,"open_issues":2874,"watchers":16849,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/23582"},"issue":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/23582"},"comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/23582/comments"},"review_comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582/comments"},"review_comment":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/23582/commits"},"statuses":{"href":"https://api.github.com/repos/pandas-dev/pandas/statuses/9f17f93272ddd3c672793b6b17d5b84c47192f8e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"h-vetinari"}}