Skip to content

Commit cc5ce59

Browse files
authored
Merge branch 'master' into 24893-pivot_table
2 parents 50ebc53 + 3150962 commit cc5ce59

File tree

661 files changed

+27638
-30295
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

661 files changed

+27638
-30295
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ dist
5757
# wheel files
5858
*.whl
5959
**/wheelhouse/*
60+
pip-wheel-metadata
6061
# coverage
6162
.coverage
6263
coverage.xml

.pre-commit-config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ repos:
1515
hooks:
1616
- id: isort
1717
language: python_venv
18+
exclude: ^pandas/__init__\.py$|^pandas/core/api\.py$

.travis.yml

+11-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ matrix:
3030
- python: 3.5
3131

3232
include:
33+
- dist: bionic
34+
# 18.04
35+
python: 3.8.0
36+
env:
37+
- JOB="3.8-dev" PATTERN="(not slow and not network)"
38+
3339
- dist: trusty
3440
env:
3541
- JOB="3.7" ENV_FILE="ci/deps/travis-37.yaml" PATTERN="(not slow and not network)"
@@ -71,24 +77,27 @@ before_install:
7177
# This overrides travis and tells it to look nowhere.
7278
- export BOTO_CONFIG=/dev/null
7379

80+
7481
install:
7582
- echo "install start"
7683
- ci/prep_cython_cache.sh
7784
- ci/setup_env.sh
7885
- ci/submit_cython_cache.sh
7986
- echo "install done"
8087

88+
8189
before_script:
8290
# display server (for clipboard functionality) needs to be started here,
8391
# does not work if done in install:setup_env.sh (GH-26103)
8492
- export DISPLAY=":99.0"
8593
- echo "sh -e /etc/init.d/xvfb start"
86-
- sh -e /etc/init.d/xvfb start
94+
- if [ "$JOB" != "3.8-dev" ]; then sh -e /etc/init.d/xvfb start; fi
8795
- sleep 3
8896

8997
script:
9098
- echo "script start"
91-
- source activate pandas-dev
99+
- echo "$JOB"
100+
- if [ "$JOB" != "3.8-dev" ]; then source activate pandas-dev; fi
92101
- ci/run_tests.sh
93102

94103
after_script:

MANIFEST.in

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ include LICENSE
33
include RELEASE.md
44
include README.md
55
include setup.py
6+
include pyproject.toml
67

78
graft doc
89
prune doc/build
@@ -14,6 +15,7 @@ graft pandas
1415
global-exclude *.bz2
1516
global-exclude *.csv
1617
global-exclude *.dta
18+
global-exclude *.feather
1719
global-exclude *.gz
1820
global-exclude *.h5
1921
global-exclude *.html
@@ -23,7 +25,10 @@ global-exclude *.pickle
2325
global-exclude *.png
2426
global-exclude *.pyc
2527
global-exclude *.pyd
28+
global-exclude *.ods
29+
global-exclude *.odt
2630
global-exclude *.sas7bdat
31+
global-exclude *.sav
2732
global-exclude *.so
2833
global-exclude *.xls
2934
global-exclude *.xlsm

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ black:
1818
black . --exclude '(asv_bench/env|\.egg|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|_build|buck-out|build|dist|setup.py)'
1919

2020
develop: build
21-
python setup.py develop
21+
python -m pip install --no-build-isolation -e .
2222

2323
doc:
2424
-rm -rf doc/build doc/source/generated

README.md

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div align="center">
2-
<img src="https://github.com/pandas-dev/pandas/blob/master/doc/logo/pandas_logo.png"><br>
2+
<img src="https://dev.pandas.io/static/img/pandas.svg"><br>
33
</div>
44

55
-----------------
@@ -188,16 +188,17 @@ python setup.py install
188188

189189
or for installing in [development mode](https://pip.pypa.io/en/latest/reference/pip_install.html#editable-installs):
190190

191+
191192
```sh
192-
python setup.py develop
193+
python -m pip install -e . --no-build-isolation --no-use-pep517
193194
```
194195

195-
Alternatively, you can use `pip` if you want all the dependencies pulled
196-
in automatically (the `-e` option is for installing it in [development
197-
mode](https://pip.pypa.io/en/latest/reference/pip_install.html#editable-installs)):
196+
If you have `make`, you can also use `make develop` to run the same command.
197+
198+
or alternatively
198199

199200
```sh
200-
pip install -e .
201+
python setup.py develop
201202
```
202203

203204
See the full instructions for [installing from source](https://pandas.pydata.org/pandas-docs/stable/install.html#installing-from-source).
@@ -224,7 +225,7 @@ Most development discussion is taking place on github in this repo. Further, the
224225

225226
All contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome.
226227

227-
A detailed overview on how to contribute can be found in the **[contributing guide](https://dev.pandas.io/contributing.html)**. There is also an [overview](.github/CONTRIBUTING.md) on GitHub.
228+
A detailed overview on how to contribute can be found in the **[contributing guide](https://dev.pandas.io/docs/contributing.html)**. There is also an [overview](.github/CONTRIBUTING.md) on GitHub.
228229

229230
If you are simply looking to start working with the pandas codebase, navigate to the [GitHub "issues" tab](https://github.com/pandas-dev/pandas/issues) and start looking through interesting issues. There are a number of issues listed under [Docs](https://github.com/pandas-dev/pandas/issues?labels=Docs&sort=updated&state=open) and [good first issue](https://github.com/pandas-dev/pandas/issues?labels=good+first+issue&sort=updated&state=open) where you could start out.
230231

asv_bench/benchmarks/categoricals.py

+14
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,18 @@ def time_sort_values(self):
282282
self.index.sort_values(ascending=False)
283283

284284

285+
class SearchSorted:
286+
def setup(self):
287+
N = 10 ** 5
288+
self.ci = tm.makeCategoricalIndex(N).sort_values()
289+
self.c = self.ci.values
290+
self.key = self.ci.categories[1]
291+
292+
def time_categorical_index_contains(self):
293+
self.ci.searchsorted(self.key)
294+
295+
def time_categorical_contains(self):
296+
self.c.searchsorted(self.key)
297+
298+
285299
from .pandas_vb_common import setup # noqa: F401 isort:skip

asv_bench/benchmarks/ctors.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class SeriesConstructors:
6767
def setup(self, data_fmt, with_index, dtype):
6868
if data_fmt in (gen_of_str, gen_of_tuples) and with_index:
6969
raise NotImplementedError(
70-
"Series constructors do not support " "using generators with indexes"
70+
"Series constructors do not support using generators with indexes"
7171
)
7272
N = 10 ** 4
7373
if dtype == "float":

asv_bench/benchmarks/eval.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def time_add(self, engine, threads):
2727

2828
def time_and(self, engine, threads):
2929
pd.eval(
30-
"(self.df > 0) & (self.df2 > 0) & " "(self.df3 > 0) & (self.df4 > 0)",
30+
"(self.df > 0) & (self.df2 > 0) & (self.df3 > 0) & (self.df4 > 0)",
3131
engine=engine,
3232
)
3333

asv_bench/benchmarks/frame_methods.py

+11
Original file line numberDiff line numberDiff line change
@@ -609,4 +609,15 @@ def time_dataframe_describe(self):
609609
self.df.describe()
610610

611611

612+
class SelectDtypes:
613+
params = [100, 1000]
614+
param_names = ["n"]
615+
616+
def setup(self, n):
617+
self.df = DataFrame(np.random.randn(10, n))
618+
619+
def time_select_dtypes(self, n):
620+
self.df.select_dtypes(include="int")
621+
622+
612623
from .pandas_vb_common import setup # noqa: F401 isort:skip

asv_bench/benchmarks/io/hdf.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,11 @@ def time_write_store_table_dc(self):
8888

8989
def time_query_store_table_wide(self):
9090
self.store.select(
91-
"table_wide", where="index > self.start_wide and " "index < self.stop_wide"
91+
"table_wide", where="index > self.start_wide and index < self.stop_wide"
9292
)
9393

9494
def time_query_store_table(self):
95-
self.store.select("table", where="index > self.start and " "index < self.stop")
95+
self.store.select("table", where="index > self.start and index < self.stop")
9696

9797
def time_store_repr(self):
9898
repr(self.store)

asv_bench/benchmarks/join_merge.py

+46-13
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,10 @@ def time_merge_ordered(self):
273273

274274

275275
class MergeAsof:
276-
params = [["backward", "forward", "nearest"]]
277-
param_names = ["direction"]
276+
params = [["backward", "forward", "nearest"], [None, 5]]
277+
param_names = ["direction", "tolerance"]
278278

279-
def setup(self, direction):
279+
def setup(self, direction, tolerance):
280280
one_count = 200000
281281
two_count = 1000000
282282

@@ -303,6 +303,9 @@ def setup(self, direction):
303303
df1["time32"] = np.int32(df1.time)
304304
df2["time32"] = np.int32(df2.time)
305305

306+
df1["timeu64"] = np.uint64(df1.time)
307+
df2["timeu64"] = np.uint64(df2.time)
308+
306309
self.df1a = df1[["time", "value1"]]
307310
self.df2a = df2[["time", "value2"]]
308311
self.df1b = df1[["time", "key", "value1"]]
@@ -313,22 +316,52 @@ def setup(self, direction):
313316
self.df2d = df2[["time32", "value2"]]
314317
self.df1e = df1[["time", "key", "key2", "value1"]]
315318
self.df2e = df2[["time", "key", "key2", "value2"]]
319+
self.df1f = df1[["timeu64", "value1"]]
320+
self.df2f = df2[["timeu64", "value2"]]
321+
322+
def time_on_int(self, direction, tolerance):
323+
merge_asof(
324+
self.df1a, self.df2a, on="time", direction=direction, tolerance=tolerance
325+
)
316326

317-
def time_on_int(self, direction):
318-
merge_asof(self.df1a, self.df2a, on="time", direction=direction)
327+
def time_on_int32(self, direction, tolerance):
328+
merge_asof(
329+
self.df1d, self.df2d, on="time32", direction=direction, tolerance=tolerance
330+
)
319331

320-
def time_on_int32(self, direction):
321-
merge_asof(self.df1d, self.df2d, on="time32", direction=direction)
332+
def time_on_uint64(self, direction, tolerance):
333+
merge_asof(
334+
self.df1f, self.df2f, on="timeu64", direction=direction, tolerance=tolerance
335+
)
322336

323-
def time_by_object(self, direction):
324-
merge_asof(self.df1b, self.df2b, on="time", by="key", direction=direction)
337+
def time_by_object(self, direction, tolerance):
338+
merge_asof(
339+
self.df1b,
340+
self.df2b,
341+
on="time",
342+
by="key",
343+
direction=direction,
344+
tolerance=tolerance,
345+
)
325346

326-
def time_by_int(self, direction):
327-
merge_asof(self.df1c, self.df2c, on="time", by="key2", direction=direction)
347+
def time_by_int(self, direction, tolerance):
348+
merge_asof(
349+
self.df1c,
350+
self.df2c,
351+
on="time",
352+
by="key2",
353+
direction=direction,
354+
tolerance=tolerance,
355+
)
328356

329-
def time_multiby(self, direction):
357+
def time_multiby(self, direction, tolerance):
330358
merge_asof(
331-
self.df1e, self.df2e, on="time", by=["key", "key2"], direction=direction
359+
self.df1e,
360+
self.df2e,
361+
on="time",
362+
by=["key", "key2"],
363+
direction=direction,
364+
tolerance=tolerance,
332365
)
333366

334367

asv_bench/benchmarks/offset.py

-49
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
from datetime import datetime
21
import warnings
32

4-
import numpy as np
5-
63
import pandas as pd
74

85
try:
@@ -54,24 +51,6 @@ def time_apply_index(self, offset):
5451
offset.apply_index(self.rng)
5552

5653

57-
class OnOffset:
58-
59-
params = offsets
60-
param_names = ["offset"]
61-
62-
def setup(self, offset):
63-
self.dates = [
64-
datetime(2016, m, d)
65-
for m in [10, 11, 12]
66-
for d in [1, 2, 3, 28, 29, 30, 31]
67-
if not (m == 11 and d == 31)
68-
]
69-
70-
def time_on_offset(self, offset):
71-
for date in self.dates:
72-
offset.onOffset(date)
73-
74-
7554
class OffsetSeriesArithmetic:
7655

7756
params = offsets
@@ -99,31 +78,3 @@ def setup(self, offset):
9978
def time_add_offset(self, offset):
10079
with warnings.catch_warnings(record=True):
10180
self.data + offset
102-
103-
104-
class OffestDatetimeArithmetic:
105-
106-
params = offsets
107-
param_names = ["offset"]
108-
109-
def setup(self, offset):
110-
self.date = datetime(2011, 1, 1)
111-
self.dt64 = np.datetime64("2011-01-01 09:00Z")
112-
113-
def time_apply(self, offset):
114-
offset.apply(self.date)
115-
116-
def time_apply_np_dt64(self, offset):
117-
offset.apply(self.dt64)
118-
119-
def time_add(self, offset):
120-
self.date + offset
121-
122-
def time_add_10(self, offset):
123-
self.date + (10 * offset)
124-
125-
def time_subtract(self, offset):
126-
self.date - offset
127-
128-
def time_subtract_10(self, offset):
129-
self.date - (10 * offset)

0 commit comments

Comments
 (0)