Skip to content

Commit d077ec8

Browse files
author
MarcoGorelli
committed
Merge remote-tracking branch 'upstream/main' into pr/jorisvandenbossche/ruff
2 parents 1774eb5 + 5b1f72a commit d077ec8

File tree

110 files changed

+1433
-687
lines changed

Some content is hidden

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

110 files changed

+1433
-687
lines changed

asv_bench/benchmarks/array.py

+9
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ def time_from_integer_array(self):
4444
pd.array(self.values_integer, dtype="Int64")
4545

4646

47+
class IntervalArray:
48+
def setup(self):
49+
N = 10_000
50+
self.tuples = [(i, i + 1) for i in range(N)]
51+
52+
def time_from_tuples(self):
53+
pd.arrays.IntervalArray.from_tuples(self.tuples)
54+
55+
4756
class StringArray:
4857
def setup(self):
4958
N = 100_000

asv_bench/benchmarks/indexing.py

+13
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,19 @@ def time_assign_list_of_columns_concat(self):
476476
concat([self.df, df], axis=1)
477477

478478

479+
class Setitem:
480+
def setup(self):
481+
N = 500_000
482+
cols = 500
483+
self.df = DataFrame(np.random.rand(N, cols))
484+
485+
def time_setitem(self):
486+
self.df[100] = 100
487+
488+
def time_setitem_list(self):
489+
self.df[[100, 200, 300]] = 100
490+
491+
479492
class ChainIndexing:
480493

481494
params = [None, "warn"]

asv_bench/benchmarks/rolling.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ class Groupby:
292292
["sum", "median", "mean", "max", "min", "kurt", "sum"],
293293
[
294294
("rolling", {"window": 2}),
295-
("rolling", {"window": "30s", "on": "C"}),
295+
("rolling", {"window": "30s"}),
296296
("expanding", {}),
297297
],
298298
)
@@ -304,9 +304,10 @@ def setup(self, method, window_kwargs):
304304
{
305305
"A": [str(i) for i in range(N)] * 10,
306306
"B": list(range(N)) * 10,
307-
"C": pd.date_range(start="1900-01-01", freq="1min", periods=N * 10),
308307
}
309308
)
309+
if isinstance(kwargs.get("window", None), str):
310+
df.index = pd.date_range(start="1900-01-01", freq="1min", periods=N * 10)
310311
self.groupby_window = getattr(df.groupby("A"), window)(**kwargs)
311312

312313
def time_method(self, method, window_kwargs):

asv_bench/benchmarks/series_methods.py

+19
Original file line numberDiff line numberDiff line change
@@ -382,4 +382,23 @@ def time_iter(self, dtype):
382382
pass
383383

384384

385+
class ToNumpy:
386+
def setup(self):
387+
N = 1_000_000
388+
self.ser = Series(
389+
np.random.randn(
390+
N,
391+
)
392+
)
393+
394+
def time_to_numpy(self):
395+
self.ser.to_numpy()
396+
397+
def time_to_numpy_double_copy(self):
398+
self.ser.to_numpy(dtype="float64", copy=True)
399+
400+
def time_to_numpy_copy(self):
401+
self.ser.to_numpy(copy=True)
402+
403+
385404
from .pandas_vb_common import setup # noqa: F401 isort:skip

ci/code_checks.sh

+30
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,36 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then
8383
$BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL09,GL10,PR03,PR04,PR05,PR06,PR08,PR09,PR10,RT01,RT04,RT05,SA02,SA03,SA04,SS01,SS02,SS03,SS04,SS05,SS06
8484
RET=$(($RET + $?)) ; echo $MSG "DONE"
8585

86+
MSG='Partially validate docstrings (RT02)' ; echo $MSG
87+
$BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=RT02 --ignore_functions \
88+
pandas.Series.align \
89+
pandas.Series.dt.total_seconds \
90+
pandas.Series.cat.rename_categories \
91+
pandas.Series.cat.reorder_categories \
92+
pandas.Series.cat.add_categories \
93+
pandas.Series.cat.remove_categories \
94+
pandas.Series.cat.remove_unused_categories \
95+
pandas.Index.all \
96+
pandas.Index.any \
97+
pandas.CategoricalIndex.rename_categories \
98+
pandas.CategoricalIndex.reorder_categories \
99+
pandas.CategoricalIndex.add_categories \
100+
pandas.CategoricalIndex.remove_categories \
101+
pandas.CategoricalIndex.remove_unused_categories \
102+
pandas.MultiIndex.drop \
103+
pandas.DatetimeIndex.to_pydatetime \
104+
pandas.TimedeltaIndex.to_pytimedelta \
105+
pandas.core.groupby.SeriesGroupBy.apply \
106+
pandas.core.groupby.DataFrameGroupBy.apply \
107+
pandas.io.formats.style.Styler.export \
108+
pandas.api.extensions.ExtensionArray.astype \
109+
pandas.api.extensions.ExtensionArray.dropna \
110+
pandas.api.extensions.ExtensionArray.isna \
111+
pandas.api.extensions.ExtensionArray.repeat \
112+
pandas.api.extensions.ExtensionArray.unique \
113+
pandas.DataFrame.align
114+
RET=$(($RET + $?)) ; echo $MSG "DONE"
115+
86116
fi
87117

88118
### DOCUMENTATION NOTEBOOKS ###

ci/deps/actions-310.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependencies:
4848
- pyxlsb
4949
- s3fs>=2021.08.0
5050
- scipy
51-
- sqlalchemy
51+
- sqlalchemy<1.4.46
5252
- tabulate
5353
- tzdata>=2022a
5454
- xarray

ci/deps/actions-38-downstream_compat.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependencies:
4848
- pyxlsb
4949
- s3fs>=2021.08.0
5050
- scipy
51-
- sqlalchemy
51+
- sqlalchemy<1.4.46
5252
- tabulate
5353
- xarray
5454
- xlrd

ci/deps/actions-38.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependencies:
4848
- pyxlsb
4949
- s3fs>=2021.08.0
5050
- scipy
51-
- sqlalchemy
51+
- sqlalchemy<1.4.46
5252
- tabulate
5353
- xarray
5454
- xlrd

ci/deps/actions-39.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependencies:
4848
- pyxlsb
4949
- s3fs>=2021.08.0
5050
- scipy
51-
- sqlalchemy
51+
- sqlalchemy<1.4.46
5252
- tabulate
5353
- tzdata>=2022a
5454
- xarray

ci/deps/circle-38-arm64.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ dependencies:
4949
- pyxlsb
5050
- s3fs>=2021.08.0
5151
- scipy
52-
- sqlalchemy
52+
- sqlalchemy<1.4.46
5353
- tabulate
5454
- xarray
5555
- xlrd

doc/source/user_guide/groupby.rst

+1
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@ The dimension of the returned result can also change:
10831083
def f(group):
10841084
return pd.DataFrame({'original': group,
10851085
'demeaned': group - group.mean()})
1086+
10861087
grouped.apply(f)
10871088
10881089
``apply`` on a Series can operate on a returned value from the applied function,

doc/source/whatsnew/v2.0.0.rst

+22-1
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,21 @@ Configuration option, ``mode.dtype_backend``, to return pyarrow-backed dtypes
3636
The ``use_nullable_dtypes`` keyword argument has been expanded to the following functions to enable automatic conversion to nullable dtypes (:issue:`36712`)
3737

3838
* :func:`read_csv`
39+
* :func:`read_clipboard`
3940
* :func:`read_fwf`
4041
* :func:`read_excel`
4142
* :func:`read_html`
4243
* :func:`read_xml`
4344
* :func:`read_sql`
4445
* :func:`read_sql_query`
4546
* :func:`read_sql_table`
47+
* :func:`read_orc`
4648

4749
Additionally a new global configuration, ``mode.dtype_backend`` can now be used in conjunction with the parameter ``use_nullable_dtypes=True`` in the following functions
4850
to select the nullable dtypes implementation.
4951

5052
* :func:`read_csv` (with ``engine="pyarrow"`` or ``engine="python"``)
53+
* :func:`read_clipboard` (with ``engine="python"``)
5154
* :func:`read_excel`
5255
* :func:`read_html`
5356
* :func:`read_xml`
@@ -105,7 +108,6 @@ Other enhancements
105108
- :meth:`DataFrame.plot.hist` now recognizes ``xlabel`` and ``ylabel`` arguments (:issue:`49793`)
106109
- Improved error message in :func:`to_datetime` for non-ISO8601 formats, informing users about the position of the first error (:issue:`50361`)
107110
- Improved error message when trying to align :class:`DataFrame` objects (for example, in :func:`DataFrame.compare`) to clarify that "identically labelled" refers to both index and columns (:issue:`50083`)
108-
- Performance improvement in :func:`to_datetime` when format is given or can be inferred (:issue:`50465`)
109111
-
110112

111113
.. ---------------------------------------------------------------------------
@@ -520,6 +522,7 @@ Removal of prior version deprecations/changes
520522
- Removed deprecated global option ``use_inf_as_null`` in favor of ``use_inf_as_na`` (:issue:`17126`)
521523
- Removed deprecated module ``pandas.core.index`` (:issue:`30193`)
522524
- Removed deprecated alias ``pandas.core.tools.datetimes.to_time``, import the function directly from ``pandas.core.tools.times`` instead (:issue:`34145`)
525+
- Removed deprecated alias ``pandas.io.json.json_normalize``, import the function directly from ``pandas.json_normalize`` instead (:issue:`27615`)
523526
- Removed deprecated :meth:`Categorical.to_dense`, use ``np.asarray(cat)`` instead (:issue:`32639`)
524527
- Removed deprecated :meth:`Categorical.take_nd` (:issue:`27745`)
525528
- Removed deprecated :meth:`Categorical.mode`, use ``Series(cat).mode()`` instead (:issue:`45033`)
@@ -625,6 +628,7 @@ Removal of prior version deprecations/changes
625628
- Disallow passing non-keyword arguments to :meth:`DataFrame.replace`, :meth:`Series.replace` except for ``to_replace`` and ``value`` (:issue:`47587`)
626629
- Disallow passing non-keyword arguments to :meth:`DataFrame.sort_values` except for ``by`` (:issue:`41505`)
627630
- Disallow passing non-keyword arguments to :meth:`Series.sort_values` (:issue:`41505`)
631+
- Disallow passing 2 non-keyword arguments to :meth:`DataFrame.reindex` (:issue:`17966`)
628632
- Disallow :meth:`Index.reindex` with non-unique :class:`Index` objects (:issue:`42568`)
629633
- Disallowed constructing :class:`Categorical` with scalar ``data`` (:issue:`38433`)
630634
- Disallowed constructing :class:`CategoricalIndex` without passing ``data`` (:issue:`38944`)
@@ -713,6 +717,7 @@ Removal of prior version deprecations/changes
713717
- Changed behavior of :meth:`Series.fillna` and :meth:`DataFrame.fillna` with ``timedelta64[ns]`` dtype and an incompatible ``fill_value``; this now casts to ``object`` dtype instead of raising, consistent with the behavior with other dtypes (:issue:`45746`)
714718
- Change the default argument of ``regex`` for :meth:`Series.str.replace` from ``True`` to ``False``. Additionally, a single character ``pat`` with ``regex=True`` is now treated as a regular expression instead of a string literal. (:issue:`36695`, :issue:`24804`)
715719
- Changed behavior of :meth:`DataFrame.any` and :meth:`DataFrame.all` with ``bool_only=True``; object-dtype columns with all-bool values will no longer be included, manually cast to ``bool`` dtype first (:issue:`46188`)
720+
- Changed behavior of :meth:`DataFrame.max`, :class:`DataFrame.min`, :class:`DataFrame.mean`, :class:`DataFrame.median`, :class:`DataFrame.skew`, :class:`DataFrame.kurt` with ``axis=None`` to return a scalar applying the aggregation across both axes (:issue:`45072`)
716721
- Changed behavior of comparison of a :class:`Timestamp` with a ``datetime.date`` object; these now compare as un-equal and raise on inequality comparisons, matching the ``datetime.datetime`` behavior (:issue:`36131`)
717722
- Changed behavior of comparison of ``NaT`` with a ``datetime.date`` object; these now raise on inequality comparisons (:issue:`39196`)
718723
- Enforced deprecation of silently dropping columns that raised a ``TypeError`` in :class:`Series.transform` and :class:`DataFrame.transform` when used with a list or dictionary (:issue:`43740`)
@@ -728,6 +733,7 @@ Removal of prior version deprecations/changes
728733
- Changed default of ``numeric_only`` to ``False`` in all DataFrame methods with that argument (:issue:`46096`, :issue:`46906`)
729734
- Changed default of ``numeric_only`` to ``False`` in :meth:`Series.rank` (:issue:`47561`)
730735
- Enforced deprecation of silently dropping nuisance columns in groupby and resample operations when ``numeric_only=False`` (:issue:`41475`)
736+
- Enforced deprecation of silently dropping nuisance columns in :class:`Rolling`, :class:`Expanding`, and :class:`ExponentialMovingWindow` ops. This will now raise a :class:`.errors.DataError` (:issue:`42834`)
731737
- Changed behavior in setting values with ``df.loc[:, foo] = bar`` or ``df.iloc[:, foo] = bar``, these now always attempt to set values inplace before falling back to casting (:issue:`45333`)
732738
- Changed default of ``numeric_only`` in various :class:`.DataFrameGroupBy` methods; all methods now default to ``numeric_only=False`` (:issue:`46072`)
733739
- Changed default of ``numeric_only`` to ``False`` in :class:`.Resampler` methods (:issue:`47177`)
@@ -747,6 +753,7 @@ Removal of prior version deprecations/changes
747753
Performance improvements
748754
~~~~~~~~~~~~~~~~~~~~~~~~
749755
- Performance improvement in :meth:`.DataFrameGroupBy.median` and :meth:`.SeriesGroupBy.median` and :meth:`.GroupBy.cumprod` for nullable dtypes (:issue:`37493`)
756+
- Performance improvement in :meth:`.DataFrameGroupBy.all`, :meth:`.DataFrameGroupBy.any`, :meth:`.SeriesGroupBy.all`, and :meth:`.SeriesGroupBy.any` for object dtype (:issue:`50623`)
750757
- Performance improvement in :meth:`MultiIndex.argsort` and :meth:`MultiIndex.sort_values` (:issue:`48406`)
751758
- Performance improvement in :meth:`MultiIndex.size` (:issue:`48723`)
752759
- Performance improvement in :meth:`MultiIndex.union` without missing values and without duplicates (:issue:`48505`, :issue:`48752`)
@@ -757,6 +764,7 @@ Performance improvements
757764
- Performance improvement in :meth:`MultiIndex.putmask` (:issue:`49830`)
758765
- Performance improvement in :meth:`Index.union` and :meth:`MultiIndex.union` when index contains duplicates (:issue:`48900`)
759766
- Performance improvement in :meth:`Series.rank` for pyarrow-backed dtypes (:issue:`50264`)
767+
- Performance improvement in :meth:`Series.searchsorted` for pyarrow-backed dtypes (:issue:`50447`)
760768
- Performance improvement in :meth:`Series.fillna` for extension array dtypes (:issue:`49722`, :issue:`50078`)
761769
- Performance improvement in :meth:`Index.join`, :meth:`Index.intersection` and :meth:`Index.union` for masked dtypes when :class:`Index` is monotonic (:issue:`50310`)
762770
- Performance improvement for :meth:`Series.value_counts` with nullable dtype (:issue:`48338`)
@@ -769,23 +777,29 @@ Performance improvements
769777
- Performance improvement for :func:`concat` with extension array backed indexes (:issue:`49128`, :issue:`49178`)
770778
- Reduce memory usage of :meth:`DataFrame.to_pickle`/:meth:`Series.to_pickle` when using BZ2 or LZMA (:issue:`49068`)
771779
- Performance improvement for :class:`~arrays.StringArray` constructor passing a numpy array with type ``np.str_`` (:issue:`49109`)
780+
- Performance improvement in :meth:`~arrays.IntervalArray.from_tuples` (:issue:`50620`)
772781
- Performance improvement in :meth:`~arrays.ArrowExtensionArray.factorize` (:issue:`49177`)
773782
- Performance improvement in :meth:`~arrays.ArrowExtensionArray.__setitem__` when key is a null slice (:issue:`50248`)
774783
- Performance improvement in :class:`~arrays.ArrowExtensionArray` comparison methods when array contains NA (:issue:`50524`)
775784
- Performance improvement in :meth:`~arrays.ArrowExtensionArray.to_numpy` (:issue:`49973`)
785+
- Performance improvement when parsing strings to :class:`BooleanDtype` (:issue:`50613`)
776786
- Performance improvement in :meth:`DataFrame.join` when joining on a subset of a :class:`MultiIndex` (:issue:`48611`)
777787
- Performance improvement for :meth:`MultiIndex.intersection` (:issue:`48604`)
788+
- Performance improvement in :meth:`DataFrame.__setitem__` (:issue:`46267`)
778789
- Performance improvement in ``var`` and ``std`` for nullable dtypes (:issue:`48379`).
779790
- Performance improvement when iterating over pyarrow and nullable dtypes (:issue:`49825`, :issue:`49851`)
780791
- Performance improvements to :func:`read_sas` (:issue:`47403`, :issue:`47405`, :issue:`47656`, :issue:`48502`)
781792
- Memory improvement in :meth:`RangeIndex.sort_values` (:issue:`48801`)
793+
- Performance improvement in :meth:`Series.to_numpy` if ``copy=True`` by avoiding copying twice (:issue:`24345`)
782794
- Performance improvement in :class:`DataFrameGroupBy` and :class:`SeriesGroupBy` when ``by`` is a categorical type and ``sort=False`` (:issue:`48976`)
783795
- Performance improvement in :class:`DataFrameGroupBy` and :class:`SeriesGroupBy` when ``by`` is a categorical type and ``observed=False`` (:issue:`49596`)
784796
- Performance improvement in :func:`read_stata` with parameter ``index_col`` set to ``None`` (the default). Now the index will be a :class:`RangeIndex` instead of :class:`Int64Index` (:issue:`49745`)
785797
- Performance improvement in :func:`merge` when not merging on the index - the new index will now be :class:`RangeIndex` instead of :class:`Int64Index` (:issue:`49478`)
786798
- Performance improvement in :meth:`DataFrame.to_dict` and :meth:`Series.to_dict` when using any non-object dtypes (:issue:`46470`)
787799
- Performance improvement in :func:`read_html` when there are multiple tables (:issue:`49929`)
788800
- Performance improvement in :func:`to_datetime` when using ``'%Y%m%d'`` format (:issue:`17410`)
801+
- Performance improvement in :func:`to_datetime` when format is given or can be inferred (:issue:`50465`)
802+
- Performance improvement in :func:`read_csv` when passing :func:`to_datetime` lambda-function to ``date_parser`` and inputs have mixed timezone offsetes (:issue:`35296`)
789803

790804
.. ---------------------------------------------------------------------------
791805
.. _whatsnew_200.bug_fixes:
@@ -824,6 +838,7 @@ Datetimelike
824838
- Bug in :func:`to_datetime` was giving incorrect results when using ``format='%Y%m%d'`` and ``errors='ignore'`` (:issue:`26493`)
825839
- Bug in :func:`to_datetime` was failing to parse date strings ``'today'`` and ``'now'`` if ``format`` was not ISO8601 (:issue:`50359`)
826840
- Bug in :func:`Timestamp.utctimetuple` raising a ``TypeError`` (:issue:`32174`)
841+
- Bug in :func:`to_datetime` was raising ``ValueError`` when parsing mixed-offset :class:`Timestamp` with ``errors='ignore'`` (:issue:`50585`)
827842

828843
Timedelta
829844
^^^^^^^^^
@@ -854,6 +869,7 @@ Conversion
854869
- Bug where any :class:`ExtensionDtype` subclass with ``kind="M"`` would be interpreted as a timezone type (:issue:`34986`)
855870
- Bug in :class:`.arrays.ArrowExtensionArray` that would raise ``NotImplementedError`` when passed a sequence of strings or binary (:issue:`49172`)
856871
- Bug in :meth:`Series.astype` raising ``pyarrow.ArrowInvalid`` when converting from a non-pyarrow string dtype to a pyarrow numeric type (:issue:`50430`)
872+
- Bug in :meth:`Series.to_numpy` converting to NumPy array before applying ``na_value`` (:issue:`48951`)
857873
- Bug in :func:`to_datetime` was not respecting ``exact`` argument when ``format`` was an ISO8601 format (:issue:`12649`)
858874
- Bug in :meth:`TimedeltaArray.astype` raising ``TypeError`` when converting to a pyarrow duration type (:issue:`49795`)
859875
-
@@ -873,6 +889,7 @@ Indexing
873889
^^^^^^^^
874890
- Bug in :meth:`DataFrame.__setitem__` raising when indexer is a :class:`DataFrame` with ``boolean`` dtype (:issue:`47125`)
875891
- Bug in :meth:`DataFrame.reindex` filling with wrong values when indexing columns and index for ``uint`` dtypes (:issue:`48184`)
892+
- Bug in :meth:`DataFrame.loc` when setting :class:`DataFrame` with different dtypes coercing values to single dtype (:issue:`50467`)
876893
- Bug in :meth:`DataFrame.loc` coercing dtypes when setting values with a list indexer (:issue:`49159`)
877894
- Bug in :meth:`Series.loc` raising error for out of bounds end of slice indexer (:issue:`50161`)
878895
- Bug in :meth:`DataFrame.loc` raising ``ValueError`` with ``bool`` indexer and :class:`MultiIndex` (:issue:`47687`)
@@ -955,6 +972,7 @@ Groupby/resample/rolling
955972
- Bug in :meth:`DataFrame.groupby` would not include a :class:`.Grouper` specified by ``key`` in the result when ``as_index=False`` (:issue:`50413`)
956973
- Bug in :meth:`.DataFrameGrouBy.value_counts` would raise when used with a :class:`.TimeGrouper` (:issue:`50486`)
957974
- Bug in :meth:`Resampler.size` caused a wide :class:`DataFrame` to be returned instead of a :class:`Series` with :class:`MultiIndex` (:issue:`46826`)
975+
- Bug in :meth:`.DataFrameGroupBy.transform` and :meth:`.SeriesGroupBy.transform` would raise incorrectly when grouper had ``axis=1`` for ``"idxmin"`` and ``"idxmax"`` arguments (:issue:`45986`)
958976
-
959977

960978
Reshaping
@@ -983,6 +1001,7 @@ ExtensionArray
9831001
- Bug in :meth:`Series.round` for pyarrow-backed dtypes raising ``AttributeError`` (:issue:`50437`)
9841002
- Bug when concatenating an empty DataFrame with an ExtensionDtype to another DataFrame with the same ExtensionDtype, the resulting dtype turned into object (:issue:`48510`)
9851003
- Bug in :meth:`array.PandasArray.to_numpy` raising with ``NA`` value when ``na_value`` is specified (:issue:`40638`)
1004+
- Bug in :meth:`api.types.is_numeric_dtype` where a custom :class:`ExtensionDtype` would not return ``True`` if ``_is_numeric`` returned ``True`` (:issue:`50563`)
9861005

9871006
Styler
9881007
^^^^^^
@@ -996,6 +1015,8 @@ Metadata
9961015

9971016
Other
9981017
^^^^^
1018+
- Bug in :meth:`Series.searchsorted` inconsistent behavior when accepting :class:`DataFrame` as parameter ``value`` (:issue:`49620`)
1019+
-
9991020

10001021
.. ***DO NOT USE THIS SECTION***
10011022

environment.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ dependencies:
5151
- pyxlsb
5252
- s3fs>=2021.08.0
5353
- scipy
54-
- sqlalchemy
54+
- sqlalchemy<1.4.46
5555
- tabulate
5656
- tzdata>=2022a
5757
- xarray

pandas/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@
171171
read_spss,
172172
)
173173

174-
from pandas.io.json import _json_normalize as json_normalize
174+
from pandas.io.json._normalize import json_normalize
175175

176176
from pandas.util._tester import test
177177

0 commit comments

Comments
 (0)