From a617bec5791becd9ffd19beecceb15938d4f4655 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 14:43:07 -0800 Subject: [PATCH 01/10] updated to_hdf so that compression flags are no longer ignored --- pandas/io/pytables.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index 35e6d53127e59..b2f2ffb01bcb8 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -257,9 +257,9 @@ def to_hdf( """ store this object, close it if we opened it """ if append: - f = lambda store: store.append(key, value, **kwargs) + f = lambda store: store.append(key, value, complib=complib, complevel=complevel, **kwargs) else: - f = lambda store: store.put(key, value, **kwargs) + f = lambda store: store.put(key, value, complib=complib, complevel=complevel, **kwargs) path_or_buf = _stringify_path(path_or_buf) if isinstance(path_or_buf, str): @@ -925,7 +925,7 @@ def func(_start, _stop, _where): return it.get_result(coordinates=True) - def put(self, key, value, format=None, append=False, **kwargs): + def put(self, key, value, format=None, append=False, complib=None, complevel=None, **kwargs): """ Store object in HDFStore. @@ -943,6 +943,17 @@ def put(self, key, value, format=None, append=False, **kwargs): append : bool, default False This will force Table format, append the input data to the existing. + complevel : int, 0-9, default None + Specifies a compression level for data. + A value of 0 or None disables compression. + complib : {'zlib', 'lzo', 'bzip2', 'blosc'}, default 'zlib' + Specifies the compression library to be used. + As of v0.20.2 these additional compressors for Blosc are supported + (default if no compressor specified: 'blosc:blosclz'): + {'blosc:blosclz', 'blosc:lz4', 'blosc:lz4hc', 'blosc:snappy', + 'blosc:zlib', 'blosc:zstd'}. + Specifying a compression library which is not available issues + a ValueError. data_columns : list, default None List of columns to create as data columns, or True to use all columns. See `here @@ -955,7 +966,7 @@ def put(self, key, value, format=None, append=False, **kwargs): if format is None: format = get_option("io.hdf.default_format") or "fixed" kwargs = self._validate_format(format, kwargs) - self._write_to_group(key, value, append=append, **kwargs) + self._write_to_group(key, value, complib=complib, complevel=complevel, append=append, **kwargs) def remove(self, key, where=None, start=None, stop=None): """ @@ -1010,7 +1021,7 @@ def remove(self, key, where=None, start=None, stop=None): return s.delete(where=where, start=start, stop=stop) def append( - self, key, value, format=None, append=True, columns=None, dropna=None, **kwargs + self, key, value, format=None, append=True, columns=None, dropna=None, complib=None, complevel=None, **kwargs ): """ Append to Table in file. Node must already exist and be Table @@ -1040,6 +1051,17 @@ def append( dropna : bool, default False Do not write an ALL nan row to the store settable by the option 'io.hdf.dropna_table'. + complevel : int, 0-9, default None + Specifies a compression level for data. + A value of 0 or None disables compression. + complib : {'zlib', 'lzo', 'bzip2', 'blosc'}, default 'zlib' + Specifies the compression library to be used. + As of v0.20.2 these additional compressors for Blosc are supported + (default if no compressor specified: 'blosc:blosclz'): + {'blosc:blosclz', 'blosc:lz4', 'blosc:lz4hc', 'blosc:snappy', + 'blosc:zlib', 'blosc:zstd'}. + Specifying a compression library which is not available issues + a ValueError. Notes ----- @@ -1477,6 +1499,7 @@ def _write_to_group( index=True, append=False, complib=None, + complevel=None, encoding=None, **kwargs ): @@ -1526,7 +1549,7 @@ def _write_to_group( raise ValueError("Compression not supported on Fixed format stores") # write the object - s.write(obj=value, append=append, complib=complib, **kwargs) + s.write(obj=value, append=append, complib=complib, complevel=complevel, **kwargs) if s.is_table and index: s.create_index(columns=index) From 1c0e8c30f144c607c9428d04853a94c41bb169d2 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 14:43:44 -0800 Subject: [PATCH 02/10] updated compression test to test table format --- pandas/tests/io/pytables/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/io/pytables/test_store.py b/pandas/tests/io/pytables/test_store.py index f9d525399bde3..f7ffd49dd303e 100644 --- a/pandas/tests/io/pytables/test_store.py +++ b/pandas/tests/io/pytables/test_store.py @@ -784,7 +784,7 @@ def test_complibs(self, setup_path): gname = "foo" # Write and read file to see if data is consistent - df.to_hdf(tmpfile, gname, complib=lib, complevel=lvl) + df.to_hdf(tmpfile, gname, complib=lib, complevel=lvl, format="table") result = pd.read_hdf(tmpfile, gname) tm.assert_frame_equal(result, df) From 5c0398841d68c47a2c783f657059bcc0f0d935ee Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 14:49:20 -0800 Subject: [PATCH 03/10] updated to_hdf so that compression flags are no longer ignored --- pandas/io/pytables.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index b2f2ffb01bcb8..3f1634ce6bff6 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -257,9 +257,13 @@ def to_hdf( """ store this object, close it if we opened it """ if append: - f = lambda store: store.append(key, value, complib=complib, complevel=complevel, **kwargs) + f = lambda store: store.append( + key, value, complib=complib, complevel=complevel, **kwargs + ) else: - f = lambda store: store.put(key, value, complib=complib, complevel=complevel, **kwargs) + f = lambda store: store.put( + key, value, complib=complib, complevel=complevel, **kwargs + ) path_or_buf = _stringify_path(path_or_buf) if isinstance(path_or_buf, str): @@ -925,7 +929,16 @@ def func(_start, _stop, _where): return it.get_result(coordinates=True) - def put(self, key, value, format=None, append=False, complib=None, complevel=None, **kwargs): + def put( + self, + key, + value, + format=None, + append=False, + complib=None, + complevel=None, + **kwargs + ): """ Store object in HDFStore. @@ -966,7 +979,9 @@ def put(self, key, value, format=None, append=False, complib=None, complevel=Non if format is None: format = get_option("io.hdf.default_format") or "fixed" kwargs = self._validate_format(format, kwargs) - self._write_to_group(key, value, complib=complib, complevel=complevel, append=append, **kwargs) + self._write_to_group( + key, value, complib=complib, complevel=complevel, append=append, **kwargs + ) def remove(self, key, where=None, start=None, stop=None): """ @@ -1021,7 +1036,16 @@ def remove(self, key, where=None, start=None, stop=None): return s.delete(where=where, start=start, stop=stop) def append( - self, key, value, format=None, append=True, columns=None, dropna=None, complib=None, complevel=None, **kwargs + self, + key, + value, + format=None, + append=True, + columns=None, + dropna=None, + complib=None, + complevel=None, + **kwargs ): """ Append to Table in file. Node must already exist and be Table @@ -1549,7 +1573,9 @@ def _write_to_group( raise ValueError("Compression not supported on Fixed format stores") # write the object - s.write(obj=value, append=append, complib=complib, complevel=complevel, **kwargs) + s.write( + obj=value, append=append, complib=complib, complevel=complevel, **kwargs + ) if s.is_table and index: s.create_index(columns=index) From 87ff22f7ed8887334b2ab411eb9134c31f92947c Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 17:04:40 -0800 Subject: [PATCH 04/10] updated put docstring and added dropna parameter --- pandas/io/pytables.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index 3f1634ce6bff6..3d33baf69ed41 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -252,17 +252,18 @@ def to_hdf( complevel=None, complib=None, append=None, + dropna=None, **kwargs ): """ store this object, close it if we opened it """ if append: f = lambda store: store.append( - key, value, complib=complib, complevel=complevel, **kwargs + key, value, complib=complib, complevel=complevel, dropna=dropna, **kwargs ) else: f = lambda store: store.put( - key, value, complib=complib, complevel=complevel, **kwargs + key, value, complib=complib, complevel=complevel, dropna=dropna,**kwargs ) path_or_buf = _stringify_path(path_or_buf) @@ -937,6 +938,7 @@ def put( append=False, complib=None, complevel=None, + dropna=False, **kwargs ): """ @@ -956,9 +958,6 @@ def put( append : bool, default False This will force Table format, append the input data to the existing. - complevel : int, 0-9, default None - Specifies a compression level for data. - A value of 0 or None disables compression. complib : {'zlib', 'lzo', 'bzip2', 'blosc'}, default 'zlib' Specifies the compression library to be used. As of v0.20.2 these additional compressors for Blosc are supported @@ -967,20 +966,23 @@ def put( 'blosc:zlib', 'blosc:zstd'}. Specifying a compression library which is not available issues a ValueError. + complevel : int, 0-9, default None + Specifies a compression level for data. + A value of 0 or None disables compression. + dropna : bool, default False, do not write an ALL nan row to + The store settable by the option 'io.hdf.dropna_table'. data_columns : list, default None List of columns to create as data columns, or True to use all columns. See `here `__. encoding : str, default None Provide an encoding for strings. - dropna : bool, default False, do not write an ALL nan row to - The store settable by the option 'io.hdf.dropna_table'. """ if format is None: format = get_option("io.hdf.default_format") or "fixed" kwargs = self._validate_format(format, kwargs) self._write_to_group( - key, value, complib=complib, complevel=complevel, append=append, **kwargs + key, value, complib=complib, complevel=complevel, append=append, dropna=dropna, **kwargs ) def remove(self, key, where=None, start=None, stop=None): @@ -1102,7 +1104,7 @@ def append( if format is None: format = get_option("io.hdf.default_format") or "table" kwargs = self._validate_format(format, kwargs) - self._write_to_group(key, value, append=append, dropna=dropna, **kwargs) + self._write_to_group(key, value, complib=complib, complevel=complevel, append=append, dropna=dropna, **kwargs) def append_to_multiple( self, d, value, selector, data_columns=None, axes=None, dropna=False, **kwargs @@ -1524,6 +1526,7 @@ def _write_to_group( append=False, complib=None, complevel=None, + dropna=False, encoding=None, **kwargs ): @@ -1574,7 +1577,7 @@ def _write_to_group( # write the object s.write( - obj=value, append=append, complib=complib, complevel=complevel, **kwargs + obj=value, append=append, complib=complib, complevel=complevel, dropna=dropna, **kwargs ) if s.is_table and index: From cfa9bafc4394dfc42dfdbfc0f0ee636e776a23d2 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 17:05:19 -0800 Subject: [PATCH 05/10] added test for the dropna parameter --- pandas/tests/io/pytables/test_store.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pandas/tests/io/pytables/test_store.py b/pandas/tests/io/pytables/test_store.py index f7ffd49dd303e..b6a939cd95dfb 100644 --- a/pandas/tests/io/pytables/test_store.py +++ b/pandas/tests/io/pytables/test_store.py @@ -263,6 +263,32 @@ def test_api_default_format(self, setup_path): pd.set_option("io.hdf.default_format", None) + def test_api_dropna(self, setup_path): + + #GH2930 + + df = DataFrame( + {"A1": np.random.randn(20)}, + index=np.arange(20), + ) + df.loc[0:15] = np.nan + + with ensure_clean_store(setup_path) as path: + + df.to_hdf(path, "df", dropna=False, format="table") + + with HDFStore(path) as store: + result = read_hdf(store, "df") + tm.assert_frame_equal(result, df) + + with ensure_clean_store(setup_path) as path: + + df.to_hdf(path, "df2", dropna=True, format="table") + + with HDFStore(path) as store: + result = read_hdf(store, "df2") + tm.assert_frame_equal(result, df[-4:]) + def test_keys(self, setup_path): with ensure_clean_store(setup_path) as store: From 3b5597f7cf02277ea162648f00725bdbf417625e Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 19:42:32 -0800 Subject: [PATCH 06/10] updated dropna and cleaned up docstring --- pandas/io/pytables.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index 3d33baf69ed41..67680bf7c01ec 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -934,11 +934,11 @@ def put( self, key, value, - format=None, - append=False, - complib=None, - complevel=None, - dropna=False, + format: str =None, + append: bool =False, + complib: str =None, + complevel: int =None, + dropna: bool=False, **kwargs ): """ @@ -4469,7 +4469,7 @@ def is_transposed(self): def get_object(self, obj): return obj - def write(self, obj, data_columns=None, **kwargs): + def write(self, obj, data_columns=None, dropna=None, **kwargs): """ we are going to write this as a frame table """ if not isinstance(obj, DataFrame): name = obj.name or "values" From 2c3b9d422d1a53f608c22ff113efe0c06e6ae653 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 19:44:14 -0800 Subject: [PATCH 07/10] added test for dropna --- pandas/tests/io/pytables/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/io/pytables/test_store.py b/pandas/tests/io/pytables/test_store.py index b6a939cd95dfb..9055fe89822ef 100644 --- a/pandas/tests/io/pytables/test_store.py +++ b/pandas/tests/io/pytables/test_store.py @@ -269,7 +269,7 @@ def test_api_dropna(self, setup_path): df = DataFrame( {"A1": np.random.randn(20)}, - index=np.arange(20), + index=np.arange(20) ) df.loc[0:15] = np.nan From 89d2b120dc09e3512c766ab0109025600f4deaff Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Mon, 4 Nov 2019 19:45:52 -0800 Subject: [PATCH 08/10] added test for dropna --- pandas/io/pytables.py | 37 +++++++++++++++++++------- pandas/tests/io/pytables/test_store.py | 7 ++--- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index 67680bf7c01ec..4554b91b01760 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -263,7 +263,7 @@ def to_hdf( ) else: f = lambda store: store.put( - key, value, complib=complib, complevel=complevel, dropna=dropna,**kwargs + key, value, complib=complib, complevel=complevel, dropna=dropna, **kwargs ) path_or_buf = _stringify_path(path_or_buf) @@ -934,11 +934,11 @@ def put( self, key, value, - format: str =None, - append: bool =False, - complib: str =None, - complevel: int =None, - dropna: bool=False, + format: str = None, + append: bool = False, + complib: str = None, + complevel: int = None, + dropna: bool = False, **kwargs ): """ @@ -982,7 +982,13 @@ def put( format = get_option("io.hdf.default_format") or "fixed" kwargs = self._validate_format(format, kwargs) self._write_to_group( - key, value, complib=complib, complevel=complevel, append=append, dropna=dropna, **kwargs + key, + value, + complib=complib, + complevel=complevel, + append=append, + dropna=dropna, + **kwargs ) def remove(self, key, where=None, start=None, stop=None): @@ -1104,7 +1110,15 @@ def append( if format is None: format = get_option("io.hdf.default_format") or "table" kwargs = self._validate_format(format, kwargs) - self._write_to_group(key, value, complib=complib, complevel=complevel, append=append, dropna=dropna, **kwargs) + self._write_to_group( + key, + value, + complib=complib, + complevel=complevel, + append=append, + dropna=dropna, + **kwargs + ) def append_to_multiple( self, d, value, selector, data_columns=None, axes=None, dropna=False, **kwargs @@ -1577,7 +1591,12 @@ def _write_to_group( # write the object s.write( - obj=value, append=append, complib=complib, complevel=complevel, dropna=dropna, **kwargs + obj=value, + append=append, + complib=complib, + complevel=complevel, + dropna=dropna, + **kwargs ) if s.is_table and index: diff --git a/pandas/tests/io/pytables/test_store.py b/pandas/tests/io/pytables/test_store.py index 9055fe89822ef..92c5f4e8be090 100644 --- a/pandas/tests/io/pytables/test_store.py +++ b/pandas/tests/io/pytables/test_store.py @@ -265,12 +265,9 @@ def test_api_default_format(self, setup_path): def test_api_dropna(self, setup_path): - #GH2930 + # GH2930 - df = DataFrame( - {"A1": np.random.randn(20)}, - index=np.arange(20) - ) + df = DataFrame({"A1": np.random.randn(20)}, index=np.arange(20)) df.loc[0:15] = np.nan with ensure_clean_store(setup_path) as path: From 1408010e021936abb1a6755ad27c2fcd70178ae3 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Tue, 21 Jan 2020 22:03:27 -0800 Subject: [PATCH 09/10] merged with master, passing dropna to put --- pandas/_testing.py | 6 +++--- pandas/core/arrays/masked.py | 4 +--- pandas/core/arrays/period.py | 2 +- pandas/core/groupby/__init__.py | 8 +------- pandas/core/indexes/base.py | 2 +- pandas/core/indexes/range.py | 2 +- pandas/core/indexes/timedeltas.py | 4 +--- pandas/core/nanops.py | 2 +- pandas/core/ops/__init__.py | 9 +-------- pandas/core/ops/dispatch.py | 2 +- pandas/core/reshape/pivot.py | 4 ++-- pandas/core/window/indexers.py | 4 ++-- pandas/core/window/numba_.py | 2 +- pandas/io/formats/css.py | 9 ++------- pandas/io/formats/excel.py | 3 +-- pandas/io/formats/style.py | 17 +++-------------- pandas/io/orc.py | 2 +- pandas/io/pytables.py | 20 ++++++++++---------- pandas/tests/arithmetic/test_interval.py | 4 +--- pandas/tests/arithmetic/test_numeric.py | 4 ++-- pandas/tests/arrays/sparse/test_array.py | 8 ++------ pandas/tests/arrays/test_array.py | 8 ++++---- pandas/tests/arrays/test_boolean.py | 4 +--- pandas/tests/arrays/test_timedeltas.py | 2 +- pandas/tests/base/test_conversion.py | 7 ++----- pandas/tests/frame/test_arithmetic.py | 4 +--- pandas/tests/frame/test_reshape.py | 2 +- pandas/tests/indexes/multi/test_contains.py | 2 +- pandas/tests/indexing/common.py | 2 +- pandas/tests/indexing/test_callable.py | 12 +++--------- pandas/tests/indexing/test_loc.py | 4 ++-- pandas/tests/io/formats/test_css.py | 12 ++++-------- pandas/tests/io/formats/test_format.py | 3 +-- pandas/tests/io/parser/test_usecols.py | 2 +- pandas/tests/io/test_parquet.py | 2 +- pandas/tests/scalar/test_na_scalar.py | 10 +++------- pandas/tests/series/methods/test_argsort.py | 2 +- pandas/tests/series/test_cumulative.py | 2 +- pandas/tests/series/test_reshaping.py | 6 ++---- pandas/tests/test_strings.py | 4 +--- pandas/util/_test_decorators.py | 4 ++-- 41 files changed, 73 insertions(+), 139 deletions(-) diff --git a/pandas/_testing.py b/pandas/_testing.py index 631d550c60534..55b0c8eda8e11 100644 --- a/pandas/_testing.py +++ b/pandas/_testing.py @@ -842,7 +842,7 @@ def assert_categorical_equal( if check_category_order: assert_index_equal(left.categories, right.categories, obj=f"{obj}.categories") assert_numpy_array_equal( - left.codes, right.codes, check_dtype=check_dtype, obj=f"{obj}.codes", + left.codes, right.codes, check_dtype=check_dtype, obj=f"{obj}.codes" ) else: assert_index_equal( @@ -982,7 +982,7 @@ def _raise(left, right, err_msg): if err_msg is None: if left.shape != right.shape: raise_assert_detail( - obj, f"{obj} shapes are different", left.shape, right.shape, + obj, f"{obj} shapes are different", left.shape, right.shape ) diff = 0 @@ -1326,7 +1326,7 @@ def assert_frame_equal( # shape comparison if left.shape != right.shape: raise_assert_detail( - obj, f"{obj} shape mismatch", f"{repr(left.shape)}", f"{repr(right.shape)}", + obj, f"{obj} shape mismatch", f"{repr(left.shape)}", f"{repr(right.shape)}" ) if check_like: diff --git a/pandas/core/arrays/masked.py b/pandas/core/arrays/masked.py index 47605413ff1a6..f70292e98806d 100644 --- a/pandas/core/arrays/masked.py +++ b/pandas/core/arrays/masked.py @@ -50,9 +50,7 @@ def __iter__(self): def __len__(self) -> int: return len(self._data) - def to_numpy( - self, dtype=None, copy=False, na_value: "Scalar" = lib.no_default, - ): + def to_numpy(self, dtype=None, copy=False, na_value: "Scalar" = lib.no_default): """ Convert to a NumPy Array. diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index d9b53aa4a867c..56e6c3aee0d2d 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -608,7 +608,7 @@ def _sub_period(self, other): return new_data def _addsub_int_array( - self, other: np.ndarray, op: Callable[[Any, Any], Any], + self, other: np.ndarray, op: Callable[[Any, Any], Any] ) -> "PeriodArray": """ Add or subtract array of integers; equivalent to applying diff --git a/pandas/core/groupby/__init__.py b/pandas/core/groupby/__init__.py index 0c5d2658978b4..15d8a996b6e7b 100644 --- a/pandas/core/groupby/__init__.py +++ b/pandas/core/groupby/__init__.py @@ -2,10 +2,4 @@ from pandas.core.groupby.groupby import GroupBy from pandas.core.groupby.grouper import Grouper -__all__ = [ - "DataFrameGroupBy", - "NamedAgg", - "SeriesGroupBy", - "GroupBy", - "Grouper", -] +__all__ = ["DataFrameGroupBy", "NamedAgg", "SeriesGroupBy", "GroupBy", "Grouper"] diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index c158bdfbac441..c55f77cd5fc28 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -274,7 +274,7 @@ def _outer_indexer(self, left, right): # Constructors def __new__( - cls, data=None, dtype=None, copy=False, name=None, tupleize_cols=True, **kwargs, + cls, data=None, dtype=None, copy=False, name=None, tupleize_cols=True, **kwargs ) -> "Index": from pandas.core.indexes.range import RangeIndex diff --git a/pandas/core/indexes/range.py b/pandas/core/indexes/range.py index 22940f851ddb0..43abae8267d0e 100644 --- a/pandas/core/indexes/range.py +++ b/pandas/core/indexes/range.py @@ -84,7 +84,7 @@ class RangeIndex(Int64Index): # Constructors def __new__( - cls, start=None, stop=None, step=None, dtype=None, copy=False, name=None, + cls, start=None, stop=None, step=None, dtype=None, copy=False, name=None ): cls._validate_dtype(dtype) diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index 1dd5c065ec216..166fe0ddb5ac2 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -69,9 +69,7 @@ class TimedeltaDelegateMixin(DatetimelikeDelegateMixin): typ="method", overwrite=True, ) -class TimedeltaIndex( - DatetimeTimedeltaMixin, dtl.TimelikeOps, TimedeltaDelegateMixin, -): +class TimedeltaIndex(DatetimeTimedeltaMixin, dtl.TimelikeOps, TimedeltaDelegateMixin): """ Immutable ndarray of timedelta64 data, represented internally as int64, and which can be boxed to timedelta objects. diff --git a/pandas/core/nanops.py b/pandas/core/nanops.py index 2bf2be082f639..8f19303fd90e6 100644 --- a/pandas/core/nanops.py +++ b/pandas/core/nanops.py @@ -1282,7 +1282,7 @@ def _zero_out_fperr(arg): @disallow("M8", "m8") def nancorr( - a: np.ndarray, b: np.ndarray, method="pearson", min_periods: Optional[int] = None, + a: np.ndarray, b: np.ndarray, method="pearson", min_periods: Optional[int] = None ): """ a, b: ndarrays diff --git a/pandas/core/ops/__init__.py b/pandas/core/ops/__init__.py index 1355060efd097..3d83a44a1f1da 100644 --- a/pandas/core/ops/__init__.py +++ b/pandas/core/ops/__init__.py @@ -82,14 +82,7 @@ } -COMPARISON_BINOPS: Set[str] = { - "eq", - "ne", - "lt", - "gt", - "le", - "ge", -} +COMPARISON_BINOPS: Set[str] = {"eq", "ne", "lt", "gt", "le", "ge"} # ----------------------------------------------------------------------------- # Ops Wrapping Utilities diff --git a/pandas/core/ops/dispatch.py b/pandas/core/ops/dispatch.py index 61a3032c7a02c..22a99f5d2eea3 100644 --- a/pandas/core/ops/dispatch.py +++ b/pandas/core/ops/dispatch.py @@ -94,7 +94,7 @@ def should_series_dispatch(left, right, op): def dispatch_to_extension_op( - op, left: Union[ABCExtensionArray, np.ndarray], right: Any, + op, left: Union[ABCExtensionArray, np.ndarray], right: Any ): """ Assume that left or right is a Series backed by an ExtensionArray, diff --git a/pandas/core/reshape/pivot.py b/pandas/core/reshape/pivot.py index e250a072766e3..38babc179ec62 100644 --- a/pandas/core/reshape/pivot.py +++ b/pandas/core/reshape/pivot.py @@ -226,7 +226,7 @@ def _add_margins( elif values: marginal_result_set = _generate_marginal_results( - table, data, values, rows, cols, aggfunc, observed, margins_name, + table, data, values, rows, cols, aggfunc, observed, margins_name ) if not isinstance(marginal_result_set, tuple): return marginal_result_set @@ -295,7 +295,7 @@ def _compute_grand_margin(data, values, aggfunc, margins_name: str = "All"): def _generate_marginal_results( - table, data, values, rows, cols, aggfunc, observed, margins_name: str = "All", + table, data, values, rows, cols, aggfunc, observed, margins_name: str = "All" ): if len(cols) > 0: # need to "interleave" the margins diff --git a/pandas/core/window/indexers.py b/pandas/core/window/indexers.py index 921cdb3c2523f..70298d5df3606 100644 --- a/pandas/core/window/indexers.py +++ b/pandas/core/window/indexers.py @@ -35,7 +35,7 @@ class BaseIndexer: """Base class for window bounds calculations.""" def __init__( - self, index_array: Optional[np.ndarray] = None, window_size: int = 0, **kwargs, + self, index_array: Optional[np.ndarray] = None, window_size: int = 0, **kwargs ): """ Parameters @@ -100,7 +100,7 @@ def get_window_bounds( ) -> Tuple[np.ndarray, np.ndarray]: return calculate_variable_window_bounds( - num_values, self.window_size, min_periods, center, closed, self.index_array, + num_values, self.window_size, min_periods, center, closed, self.index_array ) diff --git a/pandas/core/window/numba_.py b/pandas/core/window/numba_.py index 127957943d2ff..20dd1679550f2 100644 --- a/pandas/core/window/numba_.py +++ b/pandas/core/window/numba_.py @@ -63,7 +63,7 @@ def impl(window, *_args): @numba.jit(nopython=nopython, nogil=nogil, parallel=parallel) def roll_apply( - values: np.ndarray, begin: np.ndarray, end: np.ndarray, minimum_periods: int, + values: np.ndarray, begin: np.ndarray, end: np.ndarray, minimum_periods: int ) -> np.ndarray: result = np.empty(len(begin)) for i in loop_range(len(result)): diff --git a/pandas/io/formats/css.py b/pandas/io/formats/css.py index b40d2a57b8106..4d6f03489725f 100644 --- a/pandas/io/formats/css.py +++ b/pandas/io/formats/css.py @@ -20,9 +20,7 @@ def expand(self, prop, value: str): try: mapping = self.SIDE_SHORTHANDS[len(tokens)] except KeyError: - warnings.warn( - f'Could not expand "{prop}: {value}"', CSSWarning, - ) + warnings.warn(f'Could not expand "{prop}: {value}"', CSSWarning) return for key, idx in zip(self.SIDES, mapping): yield prop_fmt.format(key), tokens[idx] @@ -117,10 +115,7 @@ def __call__(self, declarations_str, inherited=None): props[prop] = self.size_to_pt( props[prop], em_pt=font_size, conversions=self.BORDER_WIDTH_RATIOS ) - for prop in [ - f"margin-{side}", - f"padding-{side}", - ]: + for prop in [f"margin-{side}", f"padding-{side}"]: if prop in props: # TODO: support % props[prop] = self.size_to_pt( diff --git a/pandas/io/formats/excel.py b/pandas/io/formats/excel.py index b0e8e4033edf2..957a98abe68dd 100644 --- a/pandas/io/formats/excel.py +++ b/pandas/io/formats/excel.py @@ -140,8 +140,7 @@ def build_border(self, props: Dict) -> Dict[str, Dict[str, str]]: return { side: { "style": self._border_style( - props.get(f"border-{side}-style"), - props.get(f"border-{side}-width"), + props.get(f"border-{side}-style"), props.get(f"border-{side}-width") ), "color": self.color_to_excel(props.get(f"border-{side}-color")), } diff --git a/pandas/io/formats/style.py b/pandas/io/formats/style.py index 565752e269d79..89219b0994288 100644 --- a/pandas/io/formats/style.py +++ b/pandas/io/formats/style.py @@ -303,10 +303,7 @@ def format_attr(pair): # ... except maybe the last for columns.names name = self.data.columns.names[r] - cs = [ - BLANK_CLASS if name is None else INDEX_NAME_CLASS, - f"level{r}", - ] + cs = [BLANK_CLASS if name is None else INDEX_NAME_CLASS, f"level{r}"] name = BLANK_VALUE if name is None else name row_es.append( { @@ -320,11 +317,7 @@ def format_attr(pair): if clabels: for c, value in enumerate(clabels[r]): - cs = [ - COL_HEADING_CLASS, - f"level{r}", - f"col{c}", - ] + cs = [COL_HEADING_CLASS, f"level{r}", f"col{c}"] cs.extend( cell_context.get("col_headings", {}).get(r, {}).get(c, []) ) @@ -368,11 +361,7 @@ def format_attr(pair): for r, idx in enumerate(self.data.index): row_es = [] for c, value in enumerate(rlabels[r]): - rid = [ - ROW_HEADING_CLASS, - f"level{c}", - f"row{r}", - ] + rid = [ROW_HEADING_CLASS, f"level{c}", f"row{r}"] es = { "type": "th", "is_visible": (_is_visible(r, c, idx_lengths) and not hidden_index), diff --git a/pandas/io/orc.py b/pandas/io/orc.py index bbefe447cb7fe..a590c517d970c 100644 --- a/pandas/io/orc.py +++ b/pandas/io/orc.py @@ -12,7 +12,7 @@ def read_orc( - path: FilePathOrBuffer, columns: Optional[List[str]] = None, **kwargs, + path: FilePathOrBuffer, columns: Optional[List[str]] = None, **kwargs ) -> "DataFrame": """ Load an ORC object from the file path, returning a DataFrame. diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index f2c3bff9218f7..9c02f1979ceb6 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -270,6 +270,7 @@ def to_hdf( min_itemsize=min_itemsize, nan_rep=nan_rep, data_columns=data_columns, + dropna=dropna, errors=errors, encoding=encoding, ) @@ -995,6 +996,7 @@ def put( min_itemsize: Optional[Union[int, Dict[str, int]]] = None, nan_rep=None, data_columns: Optional[List[str]] = None, + dropna: Optional[bool] = False, encoding=None, errors: str = "strict", ): @@ -1048,6 +1050,7 @@ def put( complevel=complevel, min_itemsize=min_itemsize, nan_rep=nan_rep, + dropna=dropna, data_columns=data_columns, encoding=encoding, errors=errors, @@ -2858,7 +2861,7 @@ def read_index_node( # If the index was an empty array write_array_empty() will # have written a sentinel. Here we relace it with the original. if "shape" in node._v_attrs and np.prod(node._v_attrs.shape) == 0: - data = np.empty(node._v_attrs.shape, dtype=node._v_attrs.value_type,) + data = np.empty(node._v_attrs.shape, dtype=node._v_attrs.value_type) kind = _ensure_decoded(node._v_attrs.kind) name = None @@ -3600,10 +3603,7 @@ def _read_axes( for a in self.axes: a.set_info(self.info) res = a.convert( - values, - nan_rep=self.nan_rep, - encoding=self.encoding, - errors=self.errors, + values, nan_rep=self.nan_rep, encoding=self.encoding, errors=self.errors ) results.append(res) @@ -4029,7 +4029,7 @@ def create_description( return d def read_coordinates( - self, where=None, start: Optional[int] = None, stop: Optional[int] = None, + self, where=None, start: Optional[int] = None, stop: Optional[int] = None ): """select coordinates (row numbers) from a table; return the coordinates object @@ -4296,7 +4296,7 @@ def write_data_chunk( self.table.flush() def delete( - self, where=None, start: Optional[int] = None, stop: Optional[int] = None, + self, where=None, start: Optional[int] = None, stop: Optional[int] = None ): # delete all rows (and return the nrows) @@ -4727,7 +4727,7 @@ def _convert_index(name: str, index: Index, encoding: str, errors: str) -> Index if inferred_type == "date": converted = np.asarray([v.toordinal() for v in values], dtype=np.int32) return IndexCol( - name, converted, "date", _tables().Time32Col(), index_name=index_name, + name, converted, "date", _tables().Time32Col(), index_name=index_name ) elif inferred_type == "string": @@ -4743,13 +4743,13 @@ def _convert_index(name: str, index: Index, encoding: str, errors: str) -> Index elif inferred_type in ["integer", "floating"]: return IndexCol( - name, values=converted, kind=kind, typ=atom, index_name=index_name, + name, values=converted, kind=kind, typ=atom, index_name=index_name ) else: assert isinstance(converted, np.ndarray) and converted.dtype == object assert kind == "object", kind atom = _tables().ObjectAtom() - return IndexCol(name, converted, kind, atom, index_name=index_name,) + return IndexCol(name, converted, kind, atom, index_name=index_name) def _unconvert_index( diff --git a/pandas/tests/arithmetic/test_interval.py b/pandas/tests/arithmetic/test_interval.py index f9e1a515277d5..b6ebeedb6a49d 100644 --- a/pandas/tests/arithmetic/test_interval.py +++ b/pandas/tests/arithmetic/test_interval.py @@ -149,9 +149,7 @@ def test_compare_scalar_other(self, op, array, other): expected = self.elementwise_comparison(op, array, other) tm.assert_numpy_array_equal(result, expected) - def test_compare_list_like_interval( - self, op, array, interval_constructor, - ): + def test_compare_list_like_interval(self, op, array, interval_constructor): # same endpoints other = interval_constructor(array.left, array.right) result = op(array, other) diff --git a/pandas/tests/arithmetic/test_numeric.py b/pandas/tests/arithmetic/test_numeric.py index f55e2b98ee912..b8794ed601bf0 100644 --- a/pandas/tests/arithmetic/test_numeric.py +++ b/pandas/tests/arithmetic/test_numeric.py @@ -98,7 +98,7 @@ class TestNumericArraylikeArithmeticWithDatetimeLike: # TODO: also check name retentention @pytest.mark.parametrize("box_cls", [np.array, pd.Index, pd.Series]) @pytest.mark.parametrize( - "left", lefts, ids=lambda x: type(x).__name__ + str(x.dtype), + "left", lefts, ids=lambda x: type(x).__name__ + str(x.dtype) ) def test_mul_td64arr(self, left, box_cls): # GH#22390 @@ -118,7 +118,7 @@ def test_mul_td64arr(self, left, box_cls): # TODO: also check name retentention @pytest.mark.parametrize("box_cls", [np.array, pd.Index, pd.Series]) @pytest.mark.parametrize( - "left", lefts, ids=lambda x: type(x).__name__ + str(x.dtype), + "left", lefts, ids=lambda x: type(x).__name__ + str(x.dtype) ) def test_div_td64arr(self, left, box_cls): # GH#22390 diff --git a/pandas/tests/arrays/sparse/test_array.py b/pandas/tests/arrays/sparse/test_array.py index baca18239b929..c506944af7d60 100644 --- a/pandas/tests/arrays/sparse/test_array.py +++ b/pandas/tests/arrays/sparse/test_array.py @@ -660,16 +660,12 @@ def test_getslice_tuple(self): dense = np.array([np.nan, 0, 3, 4, 0, 5, np.nan, np.nan, 0]) sparse = SparseArray(dense) - res = sparse[ - 4:, - ] # noqa: E231 + res = sparse[4:,] # noqa: E231 exp = SparseArray(dense[4:,]) # noqa: E231 tm.assert_sp_array_equal(res, exp) sparse = SparseArray(dense, fill_value=0) - res = sparse[ - 4:, - ] # noqa: E231 + res = sparse[4:,] # noqa: E231 exp = SparseArray(dense[4:,], fill_value=0) # noqa: E231 tm.assert_sp_array_equal(res, exp) diff --git a/pandas/tests/arrays/test_array.py b/pandas/tests/arrays/test_array.py index b1b5a9482e34f..d5f5a2bb27975 100644 --- a/pandas/tests/arrays/test_array.py +++ b/pandas/tests/arrays/test_array.py @@ -35,7 +35,7 @@ np.dtype("float32"), PandasArray(np.array([1.0, 2.0], dtype=np.dtype("float32"))), ), - (np.array([1, 2], dtype="int64"), None, IntegerArray._from_sequence([1, 2]),), + (np.array([1, 2], dtype="int64"), None, IntegerArray._from_sequence([1, 2])), # String alias passes through to NumPy ([1, 2], "float32", PandasArray(np.array([1, 2], dtype="float32"))), # Period alias @@ -120,10 +120,10 @@ (pd.Series([1, 2]), None, PandasArray(np.array([1, 2], dtype=np.int64))), # String (["a", None], "string", StringArray._from_sequence(["a", None])), - (["a", None], pd.StringDtype(), StringArray._from_sequence(["a", None]),), + (["a", None], pd.StringDtype(), StringArray._from_sequence(["a", None])), # Boolean ([True, None], "boolean", BooleanArray._from_sequence([True, None])), - ([True, None], pd.BooleanDtype(), BooleanArray._from_sequence([True, None]),), + ([True, None], pd.BooleanDtype(), BooleanArray._from_sequence([True, None])), # Index (pd.Index([1, 2]), None, PandasArray(np.array([1, 2], dtype=np.int64))), # Series[EA] returns the EA @@ -174,7 +174,7 @@ def test_array_copy(): period_array(["2000", "2001"], freq="D"), ), # interval - ([pd.Interval(0, 1), pd.Interval(1, 2)], IntervalArray.from_breaks([0, 1, 2]),), + ([pd.Interval(0, 1), pd.Interval(1, 2)], IntervalArray.from_breaks([0, 1, 2])), # datetime ( [pd.Timestamp("2000"), pd.Timestamp("2001")], diff --git a/pandas/tests/arrays/test_boolean.py b/pandas/tests/arrays/test_boolean.py index cc8d0cdcb518d..d472e6b26f9f5 100644 --- a/pandas/tests/arrays/test_boolean.py +++ b/pandas/tests/arrays/test_boolean.py @@ -650,9 +650,7 @@ def test_kleene_xor_scalar(self, other, expected): a, pd.array([True, False, None], dtype="boolean") ) - @pytest.mark.parametrize( - "other", [True, False, pd.NA, [True, False, None] * 3], - ) + @pytest.mark.parametrize("other", [True, False, pd.NA, [True, False, None] * 3]) def test_no_masked_assumptions(self, other, all_logical_operators): # The logical operations should not assume that masked values are False! a = pd.arrays.BooleanArray( diff --git a/pandas/tests/arrays/test_timedeltas.py b/pandas/tests/arrays/test_timedeltas.py index c86b4f71ee592..a32529cb58ba3 100644 --- a/pandas/tests/arrays/test_timedeltas.py +++ b/pandas/tests/arrays/test_timedeltas.py @@ -46,7 +46,7 @@ def test_incorrect_dtype_raises(self): TimedeltaArray(np.array([1, 2, 3], dtype="i8"), dtype="category") with pytest.raises( - ValueError, match=r"dtype int64 cannot be converted to timedelta64\[ns\]", + ValueError, match=r"dtype int64 cannot be converted to timedelta64\[ns\]" ): TimedeltaArray(np.array([1, 2, 3], dtype="i8"), dtype=np.dtype("int64")) diff --git a/pandas/tests/base/test_conversion.py b/pandas/tests/base/test_conversion.py index 07a15d0619bb6..10427b4ae14c0 100644 --- a/pandas/tests/base/test_conversion.py +++ b/pandas/tests/base/test_conversion.py @@ -187,7 +187,7 @@ def test_iter_box(self): PeriodArray, pd.core.dtypes.dtypes.PeriodDtype("A-DEC"), ), - (pd.IntervalIndex.from_breaks([0, 1, 2]), IntervalArray, "interval",), + (pd.IntervalIndex.from_breaks([0, 1, 2]), IntervalArray, "interval"), # This test is currently failing for datetime64[ns] and timedelta64[ns]. # The NumPy type system is sufficient for representing these types, so # we just use NumPy for Series / DataFrame columns of these types (so @@ -316,10 +316,7 @@ def test_array_multiindex_raises(): pd.core.arrays.period_array(["2000", "2001"], freq="D"), np.array([pd.Period("2000", freq="D"), pd.Period("2001", freq="D")]), ), - ( - pd.core.arrays.integer_array([0, np.nan]), - np.array([0, pd.NA], dtype=object), - ), + (pd.core.arrays.integer_array([0, np.nan]), np.array([0, pd.NA], dtype=object)), ( IntervalArray.from_breaks([0, 1, 2]), np.array([pd.Interval(0, 1), pd.Interval(1, 2)], dtype=object), diff --git a/pandas/tests/frame/test_arithmetic.py b/pandas/tests/frame/test_arithmetic.py index 659b55756c4b6..959470459a426 100644 --- a/pandas/tests/frame/test_arithmetic.py +++ b/pandas/tests/frame/test_arithmetic.py @@ -730,9 +730,7 @@ def test_zero_len_frame_with_series_corner_cases(): def test_frame_single_columns_object_sum_axis_1(): # GH 13758 - data = { - "One": pd.Series(["A", 1.2, np.nan]), - } + data = {"One": pd.Series(["A", 1.2, np.nan])} df = pd.DataFrame(data) result = df.sum(axis=1) expected = pd.Series(["A", 1.2, 0]) diff --git a/pandas/tests/frame/test_reshape.py b/pandas/tests/frame/test_reshape.py index b3af5a7b7317e..872e89c895d3b 100644 --- a/pandas/tests/frame/test_reshape.py +++ b/pandas/tests/frame/test_reshape.py @@ -406,7 +406,7 @@ def test_unstack_mixed_type_name_in_multiindex( result = df.unstack(unstack_idx) expected = pd.DataFrame( - expected_values, columns=expected_columns, index=expected_index, + expected_values, columns=expected_columns, index=expected_index ) tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/indexes/multi/test_contains.py b/pandas/tests/indexes/multi/test_contains.py index 49aa63210cd5e..8fb9a11d6d0c5 100644 --- a/pandas/tests/indexes/multi/test_contains.py +++ b/pandas/tests/indexes/multi/test_contains.py @@ -113,7 +113,7 @@ def test_contains_with_missing_value(): @pytest.mark.parametrize( "labels,expected,level", [ - ([("b", np.nan)], np.array([False, False, True]), None,), + ([("b", np.nan)], np.array([False, False, True]), None), ([np.nan, "a"], np.array([True, True, False]), 0), (["d", np.nan], np.array([False, True, True]), 1), ], diff --git a/pandas/tests/indexing/common.py b/pandas/tests/indexing/common.py index 3c027b035c2b8..d078e49e0a10c 100644 --- a/pandas/tests/indexing/common.py +++ b/pandas/tests/indexing/common.py @@ -170,7 +170,7 @@ def check_values(self, f, func, values=False): tm.assert_almost_equal(result, expected) def check_result( - self, method1, key1, method2, key2, typs=None, axes=None, fails=None, + self, method1, key1, method2, key2, typs=None, axes=None, fails=None ): def _eq(axis, obj, key1, key2): """ compare equal for these 2 keys """ diff --git a/pandas/tests/indexing/test_callable.py b/pandas/tests/indexing/test_callable.py index 621417eb38d94..be1bd4908fc79 100644 --- a/pandas/tests/indexing/test_callable.py +++ b/pandas/tests/indexing/test_callable.py @@ -17,14 +17,10 @@ def test_frame_loc_callable(self): res = df.loc[lambda x: x.A > 2] tm.assert_frame_equal(res, df.loc[df.A > 2]) - res = df.loc[ - lambda x: x.A > 2, - ] # noqa: E231 + res = df.loc[lambda x: x.A > 2,] # noqa: E231 tm.assert_frame_equal(res, df.loc[df.A > 2,]) # noqa: E231 - res = df.loc[ - lambda x: x.A > 2, - ] # noqa: E231 + res = df.loc[lambda x: x.A > 2,] # noqa: E231 tm.assert_frame_equal(res, df.loc[df.A > 2,]) # noqa: E231 res = df.loc[lambda x: x.B == "b", :] @@ -94,9 +90,7 @@ def test_frame_loc_callable_labels(self): res = df.loc[lambda x: ["A", "C"]] tm.assert_frame_equal(res, df.loc[["A", "C"]]) - res = df.loc[ - lambda x: ["A", "C"], - ] # noqa: E231 + res = df.loc[lambda x: ["A", "C"],] # noqa: E231 tm.assert_frame_equal(res, df.loc[["A", "C"],]) # noqa: E231 res = df.loc[lambda x: ["A", "C"], :] diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 4c1436b800fc3..beb6fac522d32 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -116,7 +116,7 @@ def test_loc_getitem_label_out_of_range(self): self.check_result("loc", "f", "ix", "f", typs=["floats"], fails=KeyError) self.check_result("loc", "f", "loc", "f", typs=["floats"], fails=KeyError) self.check_result( - "loc", 20, "loc", 20, typs=["ints", "uints", "mixed"], fails=KeyError, + "loc", 20, "loc", 20, typs=["ints", "uints", "mixed"], fails=KeyError ) self.check_result("loc", 20, "loc", 20, typs=["labels"], fails=TypeError) self.check_result("loc", 20, "loc", 20, typs=["ts"], axes=0, fails=TypeError) @@ -129,7 +129,7 @@ def test_loc_getitem_label_list(self): def test_loc_getitem_label_list_with_missing(self): self.check_result( - "loc", [0, 1, 2], "loc", [0, 1, 2], typs=["empty"], fails=KeyError, + "loc", [0, 1, 2], "loc", [0, 1, 2], typs=["empty"], fails=KeyError ) self.check_result( "loc", diff --git a/pandas/tests/io/formats/test_css.py b/pandas/tests/io/formats/test_css.py index 7008cef7b28fa..f6871e7a272b3 100644 --- a/pandas/tests/io/formats/test_css.py +++ b/pandas/tests/io/formats/test_css.py @@ -101,11 +101,11 @@ def test_css_side_shorthands(shorthand, expansions): top, right, bottom, left = expansions assert_resolves( - f"{shorthand}: 1pt", {top: "1pt", right: "1pt", bottom: "1pt", left: "1pt"}, + f"{shorthand}: 1pt", {top: "1pt", right: "1pt", bottom: "1pt", left: "1pt"} ) assert_resolves( - f"{shorthand}: 1pt 4pt", {top: "1pt", right: "4pt", bottom: "1pt", left: "4pt"}, + f"{shorthand}: 1pt 4pt", {top: "1pt", right: "4pt", bottom: "1pt", left: "4pt"} ) assert_resolves( @@ -191,9 +191,7 @@ def test_css_absolute_font_size(size, relative_to, resolved): inherited = None else: inherited = {"font-size": relative_to} - assert_resolves( - f"font-size: {size}", {"font-size": resolved}, inherited=inherited, - ) + assert_resolves(f"font-size: {size}", {"font-size": resolved}, inherited=inherited) @pytest.mark.parametrize( @@ -227,6 +225,4 @@ def test_css_relative_font_size(size, relative_to, resolved): inherited = None else: inherited = {"font-size": relative_to} - assert_resolves( - f"font-size: {size}", {"font-size": resolved}, inherited=inherited, - ) + assert_resolves(f"font-size: {size}", {"font-size": resolved}, inherited=inherited) diff --git a/pandas/tests/io/formats/test_format.py b/pandas/tests/io/formats/test_format.py index 97956489e7da6..faa55e335f2b8 100644 --- a/pandas/tests/io/formats/test_format.py +++ b/pandas/tests/io/formats/test_format.py @@ -2379,8 +2379,7 @@ def test_east_asian_unicode_series(self): # object dtype, longer than unicode repr s = Series( - [1, 22, 3333, 44444], - index=[1, "AB", pd.Timestamp("2011-01-01"), "あああ"], + [1, 22, 3333, 44444], index=[1, "AB", pd.Timestamp("2011-01-01"), "あああ"] ) expected = ( "1 1\n" diff --git a/pandas/tests/io/parser/test_usecols.py b/pandas/tests/io/parser/test_usecols.py index 979eb4702cc84..e05575cd79ccc 100644 --- a/pandas/tests/io/parser/test_usecols.py +++ b/pandas/tests/io/parser/test_usecols.py @@ -199,7 +199,7 @@ def test_usecols_with_whitespace(all_parsers): # Column selection by index. ([0, 1], DataFrame(data=[[1000, 2000], [4000, 5000]], columns=["2", "0"])), # Column selection by name. - (["0", "1"], DataFrame(data=[[2000, 3000], [5000, 6000]], columns=["0", "1"]),), + (["0", "1"], DataFrame(data=[[2000, 3000], [5000, 6000]], columns=["0", "1"])), ], ) def test_usecols_with_integer_like_header(all_parsers, usecols, expected): diff --git a/pandas/tests/io/test_parquet.py b/pandas/tests/io/test_parquet.py index d51c712ed5abd..cb6cfa9c98afb 100644 --- a/pandas/tests/io/test_parquet.py +++ b/pandas/tests/io/test_parquet.py @@ -559,7 +559,7 @@ def test_additional_extension_types(self, pa): { # Arrow does not yet support struct in writing to Parquet (ARROW-1644) # "c": pd.arrays.IntervalArray.from_tuples([(0, 1), (1, 2), (3, 4)]), - "d": pd.period_range("2012-01-01", periods=3, freq="D"), + "d": pd.period_range("2012-01-01", periods=3, freq="D") } ) check_round_trip(df, pa) diff --git a/pandas/tests/scalar/test_na_scalar.py b/pandas/tests/scalar/test_na_scalar.py index dcb9d66708724..6662464bca2a4 100644 --- a/pandas/tests/scalar/test_na_scalar.py +++ b/pandas/tests/scalar/test_na_scalar.py @@ -96,7 +96,7 @@ def test_pow_special(value, asarray): @pytest.mark.parametrize( - "value", [1, 1.0, True, np.bool_(True), np.int_(1), np.float_(1)], + "value", [1, 1.0, True, np.bool_(True), np.int_(1), np.float_(1)] ) @pytest.mark.parametrize("asarray", [True, False]) def test_rpow_special(value, asarray): @@ -113,9 +113,7 @@ def test_rpow_special(value, asarray): assert result == value -@pytest.mark.parametrize( - "value", [-1, -1.0, np.int_(-1), np.float_(-1)], -) +@pytest.mark.parametrize("value", [-1, -1.0, np.int_(-1), np.float_(-1)]) @pytest.mark.parametrize("asarray", [True, False]) def test_rpow_minus_one(value, asarray): if asarray: @@ -175,9 +173,7 @@ def test_logical_not(): assert ~NA is NA -@pytest.mark.parametrize( - "shape", [(3,), (3, 3), (1, 2, 3)], -) +@pytest.mark.parametrize("shape", [(3,), (3, 3), (1, 2, 3)]) def test_arithmetic_ndarray(shape, all_arithmetic_functions): op = all_arithmetic_functions a = np.zeros(shape) diff --git a/pandas/tests/series/methods/test_argsort.py b/pandas/tests/series/methods/test_argsort.py index 62273e2d363fb..67576fcc764c3 100644 --- a/pandas/tests/series/methods/test_argsort.py +++ b/pandas/tests/series/methods/test_argsort.py @@ -9,7 +9,7 @@ class TestSeriesArgsort: def _check_accum_op(self, name, ser, check_dtype=True): func = getattr(np, name) tm.assert_numpy_array_equal( - func(ser).values, func(np.array(ser)), check_dtype=check_dtype, + func(ser).values, func(np.array(ser)), check_dtype=check_dtype ) # with missing values diff --git a/pandas/tests/series/test_cumulative.py b/pandas/tests/series/test_cumulative.py index 885b5bf0476f2..86f09807ac657 100644 --- a/pandas/tests/series/test_cumulative.py +++ b/pandas/tests/series/test_cumulative.py @@ -17,7 +17,7 @@ def _check_accum_op(name, series, check_dtype=True): func = getattr(np, name) tm.assert_numpy_array_equal( - func(series).values, func(np.array(series)), check_dtype=check_dtype, + func(series).values, func(np.array(series)), check_dtype=check_dtype ) # with missing values diff --git a/pandas/tests/series/test_reshaping.py b/pandas/tests/series/test_reshaping.py index 7645fb8759a54..1fb44a2620860 100644 --- a/pandas/tests/series/test_reshaping.py +++ b/pandas/tests/series/test_reshaping.py @@ -75,9 +75,7 @@ def test_unstack_tuplename_in_multiindex(): expected = pd.DataFrame( [[1, 1, 1], [1, 1, 1], [1, 1, 1]], - columns=pd.MultiIndex.from_tuples( - [("a",), ("b",), ("c",)], names=[("A", "a")], - ), + columns=pd.MultiIndex.from_tuples([("a",), ("b",), ("c",)], names=[("A", "a")]), index=pd.Index([1, 2, 3], name=("B", "b")), ) tm.assert_frame_equal(result, expected) @@ -115,6 +113,6 @@ def test_unstack_mixed_type_name_in_multiindex( result = ser.unstack(unstack_idx) expected = pd.DataFrame( - expected_values, columns=expected_columns, index=expected_index, + expected_values, columns=expected_columns, index=expected_index ) tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/test_strings.py b/pandas/tests/test_strings.py index 62d26dacde67b..bbc7552bda4b0 100644 --- a/pandas/tests/test_strings.py +++ b/pandas/tests/test_strings.py @@ -3520,9 +3520,7 @@ def test_string_array(any_string_method): result = getattr(b.str, method_name)(*args, **kwargs) if isinstance(expected, Series): - if expected.dtype == "object" and lib.is_string_array( - expected.dropna().values, - ): + if expected.dtype == "object" and lib.is_string_array(expected.dropna().values): assert result.dtype == "string" result = result.astype(object) diff --git a/pandas/util/_test_decorators.py b/pandas/util/_test_decorators.py index d8804994af426..4526df2f7b951 100644 --- a/pandas/util/_test_decorators.py +++ b/pandas/util/_test_decorators.py @@ -182,10 +182,10 @@ def skip_if_no(package: str, min_version: Optional[str] = None) -> Callable: is_platform_windows(), reason="not used on win32" ) skip_if_has_locale = pytest.mark.skipif( - _skip_if_has_locale(), reason=f"Specific locale is set {locale.getlocale()[0]}", + _skip_if_has_locale(), reason=f"Specific locale is set {locale.getlocale()[0]}" ) skip_if_not_us_locale = pytest.mark.skipif( - _skip_if_not_us_locale(), reason=f"Specific locale is set {locale.getlocale()[0]}", + _skip_if_not_us_locale(), reason=f"Specific locale is set {locale.getlocale()[0]}" ) skip_if_no_scipy = pytest.mark.skipif( _skip_if_no_scipy(), reason="Missing SciPy requirement" From 49641f1a51b3a8ae48484fe52d308e9cbf423207 Mon Sep 17 00:00:00 2001 From: Yana Pertels Date: Tue, 21 Jan 2020 22:07:27 -0800 Subject: [PATCH 10/10] merged with master --- pandas/io/pytables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index e3e1d4fdec600..9c02f1979ceb6 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -1053,7 +1053,7 @@ def put( dropna=dropna, data_columns=data_columns, encoding=encoding, - errors=errors + errors=errors, ) def remove(self, key: str, where=None, start=None, stop=None):