{"action":"created","comment":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/201126908","pull_request_review_id":135567983,"id":201126908,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTEyNjkwOA==","diff_hunk":"@@ -0,0 +1,570 @@\n+import sys\n+import warnings\n+import copy\n+import numpy as np\n+\n+from pandas.compat import u\n+from pandas.core.dtypes.generic import ABCSeries, ABCIndexClass\n+from pandas.util._decorators import cache_readonly\n+from pandas.compat import set_function_name\n+from pandas.api.types import (is_integer, is_scalar, is_float,\n+                              is_float_dtype, is_integer_dtype,\n+                              is_object_dtype,\n+                              is_list_like,\n+                              infer_dtype)\n+from pandas.core.arrays import ExtensionArray, ExtensionOpsMixin\n+from pandas.core.dtypes.base import ExtensionDtype\n+from pandas.core.dtypes.dtypes import registry\n+from pandas.core.dtypes.missing import isna, notna\n+\n+from pandas.io.formats.printing import (\n+    format_object_summary, format_object_attrs, default_pprint)\n+\n+\n+class _IntegerDtype(ExtensionDtype):\n+    \"\"\"\n+    An ExtensionDtype to hold a single size & kind of integer dtype.\n+\n+    These specific implementations are subclasses of the non-public\n+    _IntegerDtype. For example we have Int8Dtype to represnt signed int 8s.\n+\n+    The attributes name & type are set when these subclasses are created.\n+    \"\"\"\n+    name = None\n+    type = None\n+    na_value = np.nan\n+\n+    @cache_readonly\n+    def is_signed_integer(self):\n+        return self.kind == 'i'\n+\n+    @cache_readonly\n+    def is_unsigned_integer(self):\n+        return self.kind == 'u'\n+\n+    @cache_readonly\n+    def numpy_dtype(self):\n+        \"\"\" Return an instance of our numpy dtype \"\"\"\n+        return np.dtype(self.type)\n+\n+    @cache_readonly\n+    def kind(self):\n+        return self.numpy_dtype.kind\n+\n+    @classmethod\n+    def construct_array_type(cls):\n+        \"\"\"Return the array type associated with this dtype\n+\n+        Returns\n+        -------\n+        type\n+        \"\"\"\n+        return IntegerArray\n+\n+    @classmethod\n+    def construct_from_string(cls, string):\n+        \"\"\"\n+        Construction from a string, raise a TypeError if not\n+        possible\n+        \"\"\"\n+        if string == cls.name:\n+            return cls()\n+        raise TypeError(\"Cannot construct a '{}' from \"\n+                        \"'{}'\".format(cls, string))\n+\n+\n+def to_integer_array(values, dtype=None):\n+    \"\"\"\n+    Parameters\n+    ----------\n+    values : 1D list-like\n+    dtype : dtype, optional\n+        dtype to coerce\n+\n+    Returns\n+    -------\n+    infer and return an integer array\n+\n+    Raises\n+    ------\n+    TypeError if incompatible types\n+    \"\"\"\n+    return IntegerArray(values, dtype=dtype, copy=False)\n+\n+\n+def coerce_to_array(values, dtype, mask=None, copy=False):\n+    \"\"\"\n+    Coerce the input values array to numpy arrays with a mask\n+\n+    Parameters\n+    ----------\n+    values : 1D list-like\n+    dtype : integer dtype\n+    mask : boolean 1D array, optional\n+    copy : boolean, default False\n+        if True, copy the input\n+\n+    Returns\n+    -------\n+    tuple of (values, mask)\n+    \"\"\"\n+    if dtype is not None:\n+        if not issubclass(type(dtype), _IntegerDtype):\n+            try:\n+                dtype = _dtypes[str(np.dtype(dtype))]\n+            except KeyError:\n+                raise ValueError(\"invalid dtype specified {}\".format(dtype))\n+\n+    if isinstance(values, IntegerArray):\n+        values, mask = values._data, values._mask\n+        if dtype is not None:\n+            values = values.astype(dtype.numpy_dtype, copy=False)\n+\n+        if copy:\n+            values = values.copy()\n+            mask = mask.copy()\n+        return values, mask\n+\n+    values = np.array(values, copy=copy)\n+    if is_object_dtype(values):\n+        inferred_type = infer_dtype(values)\n+        if inferred_type not in ['floating', 'integer',\n+                                 'mixed-integer', 'mixed-integer-float']:\n+            raise TypeError(\"{} cannot be converted to an IntegerDtype\".format(\n+                values.dtype))\n+\n+    elif not (is_integer_dtype(values) or is_float_dtype(values)):\n+        raise TypeError(\"{} cannot be converted to an IntegerDtype\".format(\n+            values.dtype))\n+\n+    if mask is None:\n+        mask = isna(values)\n+    else:\n+        assert len(mask) == len(values)\n+\n+    if not values.ndim == 1:\n+        raise TypeError(\"values must be a 1D list-like\")\n+    if not mask.ndim == 1:\n+        raise TypeError(\"mask must be a 1D list-like\")\n+\n+    # infer dtype if needed\n+    if dtype is None:\n+        if is_integer_dtype(values):\n+            dtype = values.dtype\n+        else:\n+            dtype = np.dtype('int64')\n+    else:\n+        dtype = dtype.type\n+\n+    # we copy as need to coerce here\n+    if mask.any():\n+        values = values.copy()\n+        values[mask] = 1\n+\n+        values = values.astype(dtype)\n+    else:\n+        values = values.astype(dtype, copy=False)\n+\n+    return values, mask\n+\n+\n+class IntegerArray(ExtensionArray, ExtensionOpsMixin):\n+    \"\"\"\n+    We represent an IntegerArray with 2 numpy arrays\n+    - data: contains a numpy integer array of the appropriate dtype\n+    - mask: a boolean array holding a mask on the data, False is missing\n+    \"\"\"\n+\n+    @cache_readonly\n+    def dtype(self):\n+        return _dtypes[str(self._data.dtype)]\n+\n+    def __init__(self, values, mask=None, dtype=None, copy=False):\n+        \"\"\"\n+        Parameters\n+        ----------\n+        values : 1D list-like / IntegerArray\n+        mask : 1D list-like, optional\n+        dtype : subclass of _IntegerDtype, optional\n+        copy : bool, default False\n+\n+        Returns\n+        -------\n+        IntegerArray\n+        \"\"\"\n+        self._data, self._mask = coerce_to_array(\n+            values, dtype=dtype, mask=mask, copy=copy)\n+\n+    @classmethod\n+    def _from_sequence(cls, scalars, dtype=None, copy=False):\n+        return cls(scalars, dtype=dtype, copy=copy)\n+\n+    @classmethod\n+    def _from_factorized(cls, values, original):\n+        return cls(values, dtype=original.dtype)\n+\n+    def __getitem__(self, item):\n+        if is_integer(item):\n+            if self._mask[item]:\n+                return self.dtype.na_value\n+            return self._data[item]\n+        return type(self)(self._data[item],\n+                          mask=self._mask[item],\n+                          dtype=self.dtype)\n+\n+    def _coerce_to_ndarray(self):\n+        \"\"\" coerce to an ndarary, preserving my scalar types \"\"\"\n+\n+        # TODO(jreback) make this better\n+        data = self._data.astype(object)\n+        data[self._mask] = self._na_value\n+        return data\n+\n+    def __array__(self, dtype=None):\n+        \"\"\"\n+        the array interface, return my values\n+        We return an object array here to preserve our scalar values\n+        \"\"\"\n+        return self._coerce_to_ndarray()\n+\n+    def __iter__(self):\n+        \"\"\"Iterate over elements of the array.\n+\n+        \"\"\"\n+        # This needs to be implemented so that pandas recognizes extension\n+        # arrays as list-like. The default implementation makes successive\n+        # calls to ``__getitem__``, which may be slower than necessary.\n+        for i in range(len(self)):","path":"pandas/core/arrays/integer.py","position":237,"original_position":237,"commit_id":"b55f9155f3ed545febcedaeb7f31b8c22b13f900","original_commit_id":"b55f9155f3ed545febcedaeb7f31b8c22b13f900","user":{"login":"jschendel","id":5332445,"node_id":"MDQ6VXNlcjUzMzI0NDU=","avatar_url":"https://avatars3.githubusercontent.com/u/5332445?v=4","gravatar_id":"","url":"https://api.github.com/users/jschendel","html_url":"https://github.com/jschendel","followers_url":"https://api.github.com/users/jschendel/followers","following_url":"https://api.github.com/users/jschendel/following{/other_user}","gists_url":"https://api.github.com/users/jschendel/gists{/gist_id}","starred_url":"https://api.github.com/users/jschendel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jschendel/subscriptions","organizations_url":"https://api.github.com/users/jschendel/orgs","repos_url":"https://api.github.com/users/jschendel/repos","events_url":"https://api.github.com/users/jschendel/events{/privacy}","received_events_url":"https://api.github.com/users/jschendel/received_events","type":"User","site_admin":false},"body":"should import `range` from `pandas.compat` to make this an iterator in py2","created_at":"2018-07-09T19:54:24Z","updated_at":"2018-07-09T19:54:24Z","html_url":"https://github.com/pandas-dev/pandas/pull/21160#discussion_r201126908","pull_request_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/201126908"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/21160#discussion_r201126908"},"pull_request":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160"}}},"pull_request":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160","id":189516884,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg5NTE2ODg0","html_url":"https://github.com/pandas-dev/pandas/pull/21160","diff_url":"https://github.com/pandas-dev/pandas/pull/21160.diff","patch_url":"https://github.com/pandas-dev/pandas/pull/21160.patch","issue_url":"https://api.github.com/repos/pandas-dev/pandas/issues/21160","number":21160,"state":"open","locked":false,"title":"ENH: Integer NA Extension Array ","user":{"login":"jreback","id":953992,"node_id":"MDQ6VXNlcjk1Mzk5Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/953992?v=4","gravatar_id":"","url":"https://api.github.com/users/jreback","html_url":"https://github.com/jreback","followers_url":"https://api.github.com/users/jreback/followers","following_url":"https://api.github.com/users/jreback/following{/other_user}","gists_url":"https://api.github.com/users/jreback/gists{/gist_id}","starred_url":"https://api.github.com/users/jreback/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jreback/subscriptions","organizations_url":"https://api.github.com/users/jreback/orgs","repos_url":"https://api.github.com/users/jreback/repos","events_url":"https://api.github.com/users/jreback/events{/privacy}","received_events_url":"https://api.github.com/users/jreback/received_events","type":"User","site_admin":false},"body":"closes #20700 \r\ncloses #20747\r\n\r\n```\r\nIn [1]: df = pd.DataFrame({\r\n'A': pd.Series([1, 2, np.nan], dtype='Int64'), \r\n'B': pd.Series([1, np.nan, 3], dtype='UInt8'), \r\n'C': [1, 2, 3]})\r\n\r\nIn [2]: df\r\nOut[2]: \r\n     A    B  C\r\n0    1    1  1\r\n1    2  NaN  2\r\n2  NaN    3  3\r\n\r\nIn [3]: df.dtypes\r\nOut[3]: \r\nA    Int64\r\nB    UInt8\r\nC    int64\r\ndtype: object\r\n\r\nIn [4]: df.A + df.B\r\nOut[4]: \r\n0      2\r\n1    NaN\r\n2    NaN\r\ndtype: Int64\r\n\r\nIn [5]: df.A + df.C\r\nOut[5]: \r\n0      2\r\n1      4\r\n2    NaN\r\ndtype: Int64\r\n\r\nIn [6]: (df.A + df.C) * 3\r\nOut[6]: \r\n0      6\r\n1     12\r\n2    NaN\r\ndtype: Int64\r\nIn [7]: (df.A + df.C) * 3 == 1\r\nOut[7]: \r\n0    False\r\n1    False\r\n2    False\r\ndtype: bool\r\n\r\nIn [8]: (df.A + df.C) * 3 == 12\r\nOut[8]: \r\n0    False\r\n1     True\r\n2    False\r\ndtype: bool\r\n```","created_at":"2018-05-22T00:00:03Z","updated_at":"2018-07-09T19:54:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d0b82495ffc5d8ee0907e308fb6e401519eca3d5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":31404521,"node_id":"MDU6TGFiZWwzMTQwNDUyMQ==","url":"https://api.github.com/repos/pandas-dev/pandas/labels/Dtypes","name":"Dtypes","color":"e102d8","default":false},{"id":76812,"node_id":"MDU6TGFiZWw3NjgxMg==","url":"https://api.github.com/repos/pandas-dev/pandas/labels/Enhancement","name":"Enhancement","color":"4E9A06","default":false},{"id":849023693,"node_id":"MDU6TGFiZWw4NDkwMjM2OTM=","url":"https://api.github.com/repos/pandas-dev/pandas/labels/ExtensionArray","name":"ExtensionArray","color":"6138b5","default":false},{"id":2822342,"node_id":"MDU6TGFiZWwyODIyMzQy","url":"https://api.github.com/repos/pandas-dev/pandas/labels/Missing-data","name":"Missing-data","color":"d7e102","default":false}],"milestone":{"url":"https://api.github.com/repos/pandas-dev/pandas/milestones/55","html_url":"https://github.com/pandas-dev/pandas/milestone/55","labels_url":"https://api.github.com/repos/pandas-dev/pandas/milestones/55/labels","id":3228419,"node_id":"MDk6TWlsZXN0b25lMzIyODQxOQ==","number":55,"title":"0.24.0","description":"","creator":{"login":"jorisvandenbossche","id":1020496,"node_id":"MDQ6VXNlcjEwMjA0OTY=","avatar_url":"https://avatars2.githubusercontent.com/u/1020496?v=4","gravatar_id":"","url":"https://api.github.com/users/jorisvandenbossche","html_url":"https://github.com/jorisvandenbossche","followers_url":"https://api.github.com/users/jorisvandenbossche/followers","following_url":"https://api.github.com/users/jorisvandenbossche/following{/other_user}","gists_url":"https://api.github.com/users/jorisvandenbossche/gists{/gist_id}","starred_url":"https://api.github.com/users/jorisvandenbossche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jorisvandenbossche/subscriptions","organizations_url":"https://api.github.com/users/jorisvandenbossche/orgs","repos_url":"https://api.github.com/users/jorisvandenbossche/repos","events_url":"https://api.github.com/users/jorisvandenbossche/events{/privacy}","received_events_url":"https://api.github.com/users/jorisvandenbossche/received_events","type":"User","site_admin":false},"open_issues":82,"closed_issues":259,"state":"open","created_at":"2018-03-29T12:00:12Z","updated_at":"2018-07-09T12:56:56Z","due_on":"2018-08-31T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160/commits","review_comments_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160/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/21160/comments","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/b55f9155f3ed545febcedaeb7f31b8c22b13f900","head":{"label":"jreback:intna","ref":"intna","sha":"b55f9155f3ed545febcedaeb7f31b8c22b13f900","user":{"login":"jreback","id":953992,"node_id":"MDQ6VXNlcjk1Mzk5Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/953992?v=4","gravatar_id":"","url":"https://api.github.com/users/jreback","html_url":"https://github.com/jreback","followers_url":"https://api.github.com/users/jreback/followers","following_url":"https://api.github.com/users/jreback/following{/other_user}","gists_url":"https://api.github.com/users/jreback/gists{/gist_id}","starred_url":"https://api.github.com/users/jreback/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jreback/subscriptions","organizations_url":"https://api.github.com/users/jreback/orgs","repos_url":"https://api.github.com/users/jreback/repos","events_url":"https://api.github.com/users/jreback/events{/privacy}","received_events_url":"https://api.github.com/users/jreback/received_events","type":"User","site_admin":false},"repo":{"id":2142250,"node_id":"MDEwOlJlcG9zaXRvcnkyMTQyMjUw","name":"pandas","full_name":"jreback/pandas","owner":{"login":"jreback","id":953992,"node_id":"MDQ6VXNlcjk1Mzk5Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/953992?v=4","gravatar_id":"","url":"https://api.github.com/users/jreback","html_url":"https://github.com/jreback","followers_url":"https://api.github.com/users/jreback/followers","following_url":"https://api.github.com/users/jreback/following{/other_user}","gists_url":"https://api.github.com/users/jreback/gists{/gist_id}","starred_url":"https://api.github.com/users/jreback/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jreback/subscriptions","organizations_url":"https://api.github.com/users/jreback/orgs","repos_url":"https://api.github.com/users/jreback/repos","events_url":"https://api.github.com/users/jreback/events{/privacy}","received_events_url":"https://api.github.com/users/jreback/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jreback/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/jreback/pandas","forks_url":"https://api.github.com/repos/jreback/pandas/forks","keys_url":"https://api.github.com/repos/jreback/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jreback/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jreback/pandas/teams","hooks_url":"https://api.github.com/repos/jreback/pandas/hooks","issue_events_url":"https://api.github.com/repos/jreback/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/jreback/pandas/events","assignees_url":"https://api.github.com/repos/jreback/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/jreback/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/jreback/pandas/tags","blobs_url":"https://api.github.com/repos/jreback/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jreback/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jreback/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/jreback/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jreback/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/jreback/pandas/languages","stargazers_url":"https://api.github.com/repos/jreback/pandas/stargazers","contributors_url":"https://api.github.com/repos/jreback/pandas/contributors","subscribers_url":"https://api.github.com/repos/jreback/pandas/subscribers","subscription_url":"https://api.github.com/repos/jreback/pandas/subscription","commits_url":"https://api.github.com/repos/jreback/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/jreback/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/jreback/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/jreback/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/jreback/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/jreback/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jreback/pandas/merges","archive_url":"https://api.github.com/repos/jreback/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jreback/pandas/downloads","issues_url":"https://api.github.com/repos/jreback/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/jreback/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/jreback/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/jreback/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jreback/pandas/labels{/name}","releases_url":"https://api.github.com/repos/jreback/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/jreback/pandas/deployments","created_at":"2011-08-02T12:17:07Z","updated_at":"2018-05-16T10:59:41Z","pushed_at":"2018-07-09T12:53:08Z","git_url":"git://github.com/jreback/pandas.git","ssh_url":"git@github.com:jreback/pandas.git","clone_url":"https://github.com/jreback/pandas.git","svn_url":"https://github.com/jreback/pandas","homepage":"http://pandas.sourceforge.net","size":127974,"stargazers_count":11,"watchers_count":11,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"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":7,"open_issues":0,"watchers":11,"default_branch":"master"}},"base":{"label":"pandas-dev:master","ref":"master","sha":"486bfe8267cd8b71fb322f3b02db3921b0a4e14e","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","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},"private":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-07-09T19:19:52Z","pushed_at":"2018-07-09T18:46:01Z","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":"http://pandas.pydata.org","size":126686,"stargazers_count":15006,"watchers_count":15006,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":6023,"mirror_url":null,"archived":false,"open_issues_count":2594,"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":6023,"open_issues":2594,"watchers":15006,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/21160"},"issue":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/21160"},"comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/21160/comments"},"review_comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/21160/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/21160/commits"},"statuses":{"href":"https://api.github.com/repos/pandas-dev/pandas/statuses/b55f9155f3ed545febcedaeb7f31b8c22b13f900"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jschendel"}}