Что нового в версии 2.1.0 (30 августа 2023)#
Это изменения в pandas 2.1.0. См. Примечания к выпуску для полного списка изменений, включая другие версии pandas.
Улучшения#
PyArrow станет обязательной зависимостью в pandas 3.0#
PyArrow станет обязательной зависимостью pandas, начиная с pandas 3.0. Это решение было принято на основе PDEP 10.
Это позволит внести больше изменений, которые чрезвычайно полезны для пользователей pandas, включая но не ограничиваясь:
определение строк как строк на основе PyArrow по умолчанию, что позволяет значительно снизить использование памяти и значительно улучшить производительность.
вывод более сложных типов данных с PyArrow по умолчанию, таких как
Decimal,lists,bytes,structured dataи другие.Лучшая совместимость с другими библиотеками, зависящими от Apache Arrow.
Мы собираем отзывы по этому решению здесь.
Избегайте использования NumPy object dtype для строк по умолчанию#
Ранее все строки по умолчанию хранились в столбцах с типом данных NumPy object.
В этом выпуске представлена опция future.infer_string который определяет все
строки как строки на основе PyArrow с dtype "string[pyarrow_numpy]" вместо.
Это новая реализация строкового типа данных, которая следует семантике NumPy в операциях сравнения
и будет возвращать np.nan в качестве индикатора пропущенных значений.
Установка опции также будет определять тип данных "string" в качестве StringDtype с
хранилищем, установленным в "pyarrow_numpy", игнорируя значение за опцией
mode.string_storage.
Эта опция работает только если установлен PyArrow. Строки на основе PyArrow имеют значительно уменьшенный объем памяти и обеспечивают большое улучшение производительности по сравнению с NumPy object (GH 54430).
Опцию можно включить с помощью:
pd.options.future.infer_string = True
Это поведение станет стандартным в pandas 3.0.
Сокращения DataFrame сохраняют расширенные типы данных#
В предыдущих версиях pandas результаты редукций DataFrame
(DataFrame.sum() DataFrame.mean() и т.д.) имели типы данных NumPy, даже когда DataFrames
имели типы данных расширений. Pandas теперь может сохранять типы данных при выполнении редукций по столбцам DataFrame
с общим типом данных (GH 52788).
Старое поведение
In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")
In [2]: df.sum()
Out[2]:
a 5
b 9
dtype: int64
In [3]: df = df.astype("int64[pyarrow]")
In [4]: df.sum()
Out[4]:
a 5
b 9
dtype: int64
Новое поведение
In [1]: df = pd.DataFrame({"a": [1, 1, 2, 1], "b": [np.nan, 2.0, 3.0, 4.0]}, dtype="Int64")
In [2]: df.sum()
Out[2]:
a 5
b 9
dtype: Int64
In [3]: df = df.astype("int64[pyarrow]")
In [4]: df.sum()
Out[4]:
a 5
b 9
dtype: int64[pyarrow]
Обратите внимание, что тип данных теперь является маскированным типом данных и типом данных PyArrow соответственно, тогда как ранее это был целочисленный тип данных NumPy.
Чтобы позволить сокращениям DataFrame сохранять типы данных расширений, ExtensionArray._reduce() получил новый ключевой параметр keepdims. Вызов ExtensionArray._reduce() с keepdims=True должен возвращать массив длины 1 вдоль оси редукции. Для сохранения обратной совместимости параметр не требуется, но станет обязательным в будущем. Если параметр не найден в сигнатуре, редукции DataFrame не могут сохранить расширенные типы данных. Также, если параметр не найден, будет FutureWarning будет выдано предупреждение, и проверки типов, такие как mypy, могут жаловаться на несовместимость сигнатуры с ExtensionArray._reduce().
Улучшения Copy-on-Write#
Series.transform()не учитывает Copy-on-Write приfuncизменяетSeriesinplace (GH 53747)Вызов
Index.values()теперь будет возвращать массив NumPy только для чтения (GH 53704)Установка
SeriesвDataFrameтеперь создает ленивую, а не глубокую копию (GH 53142)The
DataFrameконструктор, при создании DataFrame из словаря объектов Index и указанииcopy=False, теперь будет использовать ленивую копию этих объектов Index для колонок DataFrame (GH 52947)Поверхностная копия Series или DataFrame (
df.copy(deep=False)) теперь также возвращает поверхностную копию строк/столбцовIndexобъекты вместо только поверхностной копии данных, т.е. индекс результата больше не идентичен (df.copy(deep=False).index is df.indexбольше не True) (GH 53721)DataFrame.head()иDataFrame.tail()теперь будет возвращать глубокие копии (GH 54011)Добавить механизм ленивого копирования в
DataFrame.eval()(GH 53746)Попытка выполнить операцию на месте для временного выбора столбцов (например,
df["a"].fillna(100, inplace=True)) теперь всегда будет выдавать предупреждение, когда включен Copy-on-Write. В этом режиме операции на месте никогда не будут работать, поскольку выборка ведет себя как временная копия. Это верно для:DataFrame.update / Series.update
DataFrame.fillna / Series.fillna
DataFrame.replace / Series.replace
DataFrame.clip / Series.clip
DataFrame.where / Series.where
DataFrame.mask / Series.mask
DataFrame.interpolate / Series.interpolate
DataFrame.ffill / Series.ffill
DataFrame.bfill / Series.bfill
Новый DataFrame.map() метод и поддержка для ExtensionArrays#
The DataFrame.map() был добавлен и DataFrame.applymap() был объявлен устаревшим. DataFrame.map() имеет ту же функциональность, что и DataFrame.applymap(), но новое название лучше передаёт, что это DataFrame версия Series.map() (GH 52353).
При передаче вызываемого объекта, Series.map() применяет вызываемый объект ко всем элементам Series.
Аналогично, DataFrame.map() применяет вызываемый объект ко всем элементам DataFrame, в то время как Index.map() применяет вызываемый объект ко всем элементам Index.
Часто нежелательно применять вызываемый объект к nan-подобным значениям массива, и чтобы избежать этого, map метод можно было вызывать с na_action="ignore", т.е. ser.map(func, na_action="ignore").
Однако, na_action="ignore" не был реализован для многих ExtensionArray и Index типы
и na_action="ignore" не работал корректно для любого ExtensionArray подкласс, кроме nullable numeric (т.е. с dtype Int64 и т.д.).
na_action="ignore" теперь работает для всех типов массивов (GH 52219, GH 51645, GH 51809, GH 51936, GH 52033; GH 52096).
Предыдущее поведение:
In [1]: ser = pd.Series(["a", "b", np.nan], dtype="category")
In [2]: ser.map(str.upper, na_action="ignore")
NotImplementedError
In [3]: df = pd.DataFrame(ser)
In [4]: df.applymap(str.upper, na_action="ignore") # worked for DataFrame
0
0 A
1 B
2 NaN
In [5]: idx = pd.Index(ser)
In [6]: idx.map(str.upper, na_action="ignore")
TypeError: CategoricalIndex.map() got an unexpected keyword argument 'na_action'
Новое поведение:
In [5]: ser = pd.Series(["a", "b", np.nan], dtype="category")
In [6]: ser.map(str.upper, na_action="ignore")
Out[6]:
0 A
1 B
2 NaN
dtype: category
Categories (2, object): ['A', 'B']
In [7]: df = pd.DataFrame(ser)
In [8]: df.map(str.upper, na_action="ignore")
Out[8]:
0
0 A
1 B
2 NaN
In [9]: idx = pd.Index(ser)
In [10]: idx.map(str.upper, na_action="ignore")
Out[10]: CategoricalIndex(['A', 'B', nan], categories=['A', 'B'], ordered=False, dtype='category')
Также обратите внимание, что Categorical.map() неявно имел свои na_action установлено в "ignore" по умолчанию. Это устарело, и значение по умолчанию для Categorical.map() изменится на na_action=None, согласуется со всеми другими типами массивов.
Новая реализация DataFrame.stack()#
pandas перереализовал DataFrame.stack(). Чтобы использовать новую реализацию, передайте аргумент future_stack=True. Это станет единственным вариантом в pandas 3.0.
Предыдущая реализация имела два основных поведенческих недостатка.
Предыдущая реализация излишне добавляла значения NA в результат. Пользователь мог автоматически удалить значения NA, передав
dropna=True(по умолчанию), но это также может удалить значения NA из результата, которые существовали во входных данных. См. примеры ниже.Предыдущая реализация с
sort=True(по умолчанию) иногда сортировал часть результирующего индекса, а иногда нет. Если столбцы входных данных не aMultiIndex, тогда результирующий индекс никогда не будет отсортирован. Если столбцы являютсяMultiIndex, то в большинстве случаев уровень(и) в результирующем индексе, которые получены из стекирования уровня(ей) столбцов, будут отсортированы. В редких случаях такие уровень(и) будут отсортированы в нестандартном порядке, в зависимости от того, как были созданы столбцы.
Новая реализация (future_stack=True) больше не будет ненужно вводить значения NA при укладке нескольких уровней и никогда не будет сортировать. Таким образом, аргументы dropna и sort не используются и должны оставаться неуказанными при использовании future_stack=True. Эти аргументы будут удалены в следующем основном релизе.
In [11]: columns = pd.MultiIndex.from_tuples([("B", "d"), ("A", "c")])
In [12]: df = pd.DataFrame([[0, 2], [1, 3]], index=["z", "y"], columns=columns)
In [13]: df
Out[13]:
B A
d c
z 0 2
y 1 3
В предыдущей версии (future_stack=False), значение по умолчанию для dropna=True удалил бы ненужно введённые значения NA, но всё же привёл бы тип данных к float64 в процессе. В новой версии не вводятся NA, поэтому нет приведения типа.
In [14]: df.stack([0, 1], future_stack=False, dropna=True)
Out[14]:
z A c 2.0
B d 0.0
y A c 3.0
B d 1.0
dtype: float64
In [15]: df.stack([0, 1], future_stack=True)
Out[15]:
z B d 0
A c 2
y B d 1
A c 3
dtype: int64
Если входные данные содержат значения NA, предыдущая версия также удаляла их с dropna=True или ввести новые значения NA с помощью dropna=False. Новая версия сохраняет все значения из входных данных.
In [16]: df = pd.DataFrame([[0, 2], [np.nan, np.nan]], columns=columns)
In [17]: df
Out[17]:
B A
d c
0 0.0 2.0
1 NaN NaN
In [18]: df.stack([0, 1], future_stack=False, dropna=True)
Out[18]:
0 A c 2.0
B d 0.0
dtype: float64
In [19]: df.stack([0, 1], future_stack=False, dropna=False)
Out[19]:
0 A d NaN
c 2.0
B d 0.0
c NaN
1 A d NaN
c NaN
B d NaN
c NaN
dtype: float64
In [20]: df.stack([0, 1], future_stack=True)
Out[20]:
0 B d 0.0
A c 2.0
1 B d NaN
A c NaN
dtype: float64
Другие улучшения#
Series.ffill()иSeries.bfill()теперь поддерживаются для объектов сIntervalDtype(GH 54247)Добавлен
filtersпараметр дляread_parquet()для фильтрации данных, совместимый с обоимиengines(GH 53212)Categorical.map()иCategoricalIndex.map()теперь имеютna_actionпараметр.Categorical.map()неявно имел значение по умолчанию"ignore"дляna_action. Это формально устарело и будет изменено наNoneв будущем. Также обратите внимание, чтоSeries.map()имеет значение по умолчаниюna_action=Noneи вызовы series с категориальными данными теперь будут использоватьna_action=Noneесли явно не установлено иное (GH 44279)api.extensions.ExtensionArrayтеперь имеетmap()метод (GH 51809)DataFrame.applymap()теперь используетmap()метод базовогоapi.extensions.ExtensionArrayэкземпляры (GH 52219)MultiIndex.sort_values()теперь поддерживаетna_position(GH 51612)MultiIndex.sortlevel()иIndex.sortlevel()получил новый ключевой параметрna_position(GH 51612)arrays.DatetimeArray.map(),arrays.TimedeltaArray.map()иarrays.PeriodArray.map()теперь может приниматьna_actionаргумент (GH 51644)arrays.SparseArray.map()теперь поддерживаетna_action(GH 52096).pandas.read_html()теперь поддерживаетstorage_optionsключевое слово при использовании с URL, позволяющее пользователям добавлять заголовки к исходящему HTTP-запросу (GH 49944)Добавить
Index.diff()иIndex.round()(GH 19708)Добавить
"latex-math"в качестве опции дляescapeаргументStylerкоторый не экранирует все символы между"\("и"\)"при форматировании (GH 51903)Добавить тип данных категорий в
reprинформация оCategoricalDtype(GH 52179)Добавление
engine_kwargsпараметр дляread_excel()(GH 52214)Классы, полезные для указания типов, были добавлены в публичный API в новом подмодуле
pandas.api.typing(GH 48577)Реализовано
Series.dt.is_month_start,Series.dt.is_month_end,Series.dt.is_year_start,Series.dt.is_year_end,Series.dt.is_quarter_start,Series.dt.is_quarter_end,Series.dt.days_in_month,Series.dt.unit,Series.dt.normalize,Series.dt.day_name(),Series.dt.month_name(),Series.dt.tz_convert()дляArrowDtypeсpyarrow.timestamp(GH 52388, GH 51718)DataFrameGroupBy.agg()иDataFrameGroupBy.transform()теперь поддерживает группировку по нескольким ключам, когда индекс не являетсяMultiIndexдляengine="numba"(GH 53486)SeriesGroupBy.agg()иDataFrameGroupBy.agg()теперь поддерживают передачу нескольких функций дляengine="numba"(GH 53486)SeriesGroupBy.transform()иDataFrameGroupBy.transform()теперь поддерживает передачу строки в качестве функции дляengine="numba"(GH 53579)DataFrame.stack()получилsortключевое слово для указания, будет ли результирующийMultiIndexуровни отсортированы (GH 15105)DataFrame.unstack()получилsortключевое слово для указания, будет ли результирующийMultiIndexуровни отсортированы (GH 15105)Series.explode()теперь поддерживает типы списков на основе PyArrow (GH 53602)Series.str.join()теперь поддерживаетArrowDtype(pa.string())(GH 53646)Добавить
validateпараметр дляCategorical.from_codes()(GH 50975)Добавлен
ExtensionArray.interpolate()используетсяSeries.interpolate()иDataFrame.interpolate()(GH 53659)Добавлен
engine_kwargsпараметр дляDataFrame.to_excel()(GH 53220)Реализовано
api.interchange.from_dataframe()дляDatetimeTZDtype(GH 54239)Реализовано
__from_arrow__наDatetimeTZDtype(GH 52201)Реализовано
__pandas_priority__чтобы разрешить пользовательским типам иметь приоритет надDataFrame,Series,Index, илиExtensionArrayдля арифметических операций, см. руководство разработчика (GH 48347)Улучшено сообщение об ошибке при наличии несовместимых столбцов с использованием
DataFrame.merge()(GH 51861)Улучшено сообщение об ошибке при установке
DataFrameс неправильным количеством столбцов черезDataFrame.isetitem()(GH 51701)Улучшена обработка ошибок при использовании
DataFrame.to_json()с несовместимымиindexиorientаргументы (GH 52143)Улучшено сообщение об ошибке при создании DataFrame с пустыми данными (0 строк), без индекса и неправильным количеством столбцов (GH 52084)
Улучшено сообщение об ошибке при указании недопустимого
indexилиoffsetаргумент дляVariableOffsetWindowIndexer(GH 54379)Пусть
DataFrame.to_feather()принимать нестандартноеIndexи нестроковые имена столбцов (GH 51787)Добавлен новый параметр
by_rowtoSeries.apply()иDataFrame.apply(). Когда установлено вFalseпредоставленные вызываемые объекты всегда будут работать со всей Series или DataFrame (GH 53400, GH 53601).DataFrame.shift()иSeries.shift()теперь позволяет сдвигать на несколько периодов, предоставляя список периодов (GH 44424)Агрегации Groupby с
numba(такие какDataFrameGroupBy.sum()) теперь может сохранять dtype входных данных вместо приведения кfloat64(GH 44952)Улучшенное сообщение об ошибке, когда
DataFrameGroupBy.agg()не удалось (GH 52930)Многие функции read/to_*, такие как
DataFrame.to_pickle()иread_csv(), поддержка передачи аргументов сжатия вlzma.LZMAFile(GH 52979)Редукции
Series.argmax(),Series.argmin(),Series.idxmax(),Series.idxmin(),Index.argmax(),Index.argmin(),DataFrame.idxmax(),DataFrame.idxmin()теперь поддерживаются для object-dtype (GH 4279, GH 18021, GH 40685, GH 43697)DataFrame.to_parquet()иread_parquet()теперь будет записывать и читатьattrsсоответственно (GH 54346)Index.all()иIndex.any()с плавающими dtypes и timedelta64 dtypes больше не вызываютTypeError, соответствующийSeries.all()иSeries.any()поведение (GH 54566)Series.cummax(),Series.cummin()иSeries.cumprod()теперь поддерживаются для pyarrow dtypes с версией pyarrow 13.0 и выше (GH 52085)Добавлена поддержка стандарта DataFrame Consortium (GH 54383)
Улучшение производительности в
DataFrameGroupBy.quantile()иSeriesGroupBy.quantile()(GH 51722)Типы данных integer на основе PyArrow теперь поддерживают побитовые операции (GH 54495)
Обратно несовместимые изменения API#
Повышена минимальная версия Python#
pandas 2.1.0 поддерживает Python 3.9 и выше.
Повышенные минимальные версии для зависимостей#
Некоторые минимальные поддерживаемые версии зависимостей были обновлены. Если установлены, теперь требуются:
Пакет |
Минимальная версия |
Обязательно |
Изменено |
|---|---|---|---|
numpy |
1.22.4 |
X |
X |
mypy (dev) |
1.4.1 |
X |
|
beautifulsoup4 |
4.11.1 |
X |
|
bottleneck |
1.3.4 |
X |
|
dataframe-api-compat |
0.1.7 |
X |
|
fastparquet |
0.8.1 |
X |
|
fsspec |
2022.05.0 |
X |
|
гипотеза |
6.46.1 |
X |
|
gcsfs |
2022.05.0 |
X |
|
jinja2 |
3.1.2 |
X |
|
lxml |
4.8.0 |
X |
|
numba |
0.55.2 |
X |
|
numexpr |
2.8.0 |
X |
|
openpyxl |
3.0.10 |
X |
|
pandas-gbq |
0.17.5 |
X |
|
psycopg2 |
2.9.3 |
X |
|
pyreadstat |
1.1.5 |
X |
|
pyqt5 |
5.15.6 |
X |
|
pytables |
3.7.0 |
X |
|
pytest |
7.3.2 |
X |
|
python-snappy |
0.6.1 |
X |
|
pyxlsb |
1.0.9 |
X |
|
s3fs |
2022.05.0 |
X |
|
scipy |
1.8.1 |
X |
|
sqlalchemy |
1.4.36 |
X |
|
tabulate |
0.8.10 |
X |
|
xarray |
2022.03.0 |
X |
|
xlsxwriter |
3.0.3 |
X |
|
zstandard |
0.17.0 |
X |
Для дополнительные библиотеки общая рекомендация — использовать последнюю версию.
См. Зависимости и Необязательные зависимости подробнее.
Другие изменения API#
arrays.PandasArrayбыл переименованNumpyExtensionArrayи прикрепленное имя типа данных изменилось сPandasDtypetoNumpyEADtype; импортPandasArrayвсе еще работает до следующей основной версии (GH 53694)
Устаревшие функции#
Устаревшее неявное повышение типа в операциях Series, подобных setitem#
PDEP-6: https://pandas.pydata.org/pdeps/0006-ban-upcasting.html
Операции, подобные присваиванию, на Series (или столбцах DataFrame), которые молча повышают dtype, устарели и показывают предупреждение. Примеры затронутых операций:
ser.fillna('foo', inplace=True)ser.where(ser.isna(), 'foo', inplace=True)ser.iloc[indexer] = 'foo'ser.loc[indexer] = 'foo'df.iloc[indexer, 0] = 'foo'df.loc[indexer, 'a'] = 'foo'ser[indexer] = 'foo'
где ser является Series, df является DataFrame, и indexer
может быть срезом, маской, одиночным значением, списком или массивом значений, или любым другим
допустимым индексатором.
В будущей версии это будет вызывать ошибку, и вам следует сначала привести к общему типу данных.
Предыдущее поведение:
In [1]: ser = pd.Series([1, 2, 3])
In [2]: ser
Out[2]:
0 1
1 2
2 3
dtype: int64
In [3]: ser[0] = 'not an int64'
In [4]: ser
Out[4]:
0 not an int64
1 2
2 3
dtype: object
Новое поведение:
In [1]: ser = pd.Series([1, 2, 3])
In [2]: ser
Out[2]:
0 1
1 2
2 3
dtype: int64
In [3]: ser[0] = 'not an int64'
FutureWarning:
Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas.
Value 'not an int64' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
In [4]: ser
Out[4]:
0 not an int64
1 2
2 3
dtype: object
Чтобы сохранить текущее поведение, в приведенном выше случае можно преобразовать ser to object сначала dtype:
In [21]: ser = pd.Series([1, 2, 3])
In [22]: ser = ser.astype('object')
In [23]: ser[0] = 'not an int64'
In [24]: ser
Out[24]:
0 not an int64
1 2
2 3
dtype: object
В зависимости от случая использования может быть более уместно привести к другому типу данных.
В следующем примере, например, мы приводим к float64:
In [25]: ser = pd.Series([1, 2, 3])
In [26]: ser = ser.astype('float64')
In [27]: ser[0] = 1.1
In [28]: ser
Out[28]:
0 1.1
1 2.0
2 3.0
dtype: float64
Для дальнейшего чтения, пожалуйста, смотрите https://pandas.pydata.org/pdeps/0006-ban-upcasting.html.
Устаревший разбор дат и времени со смешанными часовыми поясами#
Разбор дат и времени со смешанными часовыми поясами устарел и выдает предупреждение, если пользователь не передает utc=True to to_datetime() (GH 50887)
Предыдущее поведение:
In [7]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]
In [8]: pd.to_datetime(data, utc=False)
Out[8]:
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')
Новое поведение:
In [9]: pd.to_datetime(data, utc=False)
FutureWarning:
In a future version of pandas, parsing datetimes with mixed time zones will raise
a warning unless `utc=True`. Please specify `utc=True` to opt in to the new behaviour
and silence this warning. To create a `Series` with mixed offsets and `object` dtype,
please use `apply` and `datetime.datetime.strptime`.
Index([2020-01-01 00:00:00+06:00, 2020-01-01 00:00:00+01:00], dtype='object')
Чтобы отключить это предупреждение и избежать ошибки в будущей версии pandas,
укажите utc=True:
In [29]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]
In [30]: pd.to_datetime(data, utc=True)
Out[30]: DatetimeIndex(['2019-12-31 18:00:00+00:00', '2019-12-31 23:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)
Чтобы создать Series со смещенными и object тип данных, пожалуйста, используйте apply
и datetime.datetime.strptime:
In [31]: import datetime as dt
In [32]: data = ["2020-01-01 00:00:00+06:00", "2020-01-01 00:00:00+01:00"]
In [33]: pd.Series(data).apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S%z'))
Out[33]:
0 2020-01-01 00:00:00+06:00
1 2020-01-01 00:00:00+01:00
dtype: object
Другие устаревшие функции#
Устаревший
DataFrameGroupBy.dtypes, проверьтеdtypesна базовом объекте вместо (GH 51045)Устаревший
DataFrame._dataиSeries._data, используйте публичные API вместо (GH 33333)Устаревший
concat()поведение, когда любой из объединяемых объектов имеет длину 0; в прошлом типы данных пустых объектов игнорировались при определении результирующего типа данных, в будущей версии это будет не так (GH 39122)Устаревший
Categorical.to_list(), используйтеobj.tolist()вместо (GH 51254)Устаревший
DataFrameGroupBy.all()иDataFrameGroupBy.any()с datetime64 илиPeriodDtype0.411SeriesиDataFrameустаревания (GH 34479)Устаревший
axis=1вDataFrame.ewm(),DataFrame.rolling(),DataFrame.expanding(), транспонировать перед вызовом метода (GH 51778)Устаревший
axis=1вDataFrame.groupby()и вGrouperконструктор, сделайтеframe.T.groupby(...)вместо (GH 51203)Устаревший
broadcast_axisключевое слово вSeries.align()иDataFrame.align(), приведение к более высокому типу перед вызовомalignсleft = DataFrame({col: left for col in right.columns}, index=right.index)(GH 51856)Устаревший
downcastключевое слово вIndex.fillna()(GH 53956)Устаревший
fill_methodиlimitключевые слова вDataFrame.pct_change(),Series.pct_change(),DataFrameGroupBy.pct_change(), иSeriesGroupBy.pct_change(), явно вызовите, например,DataFrame.ffill()илиDataFrame.bfill()перед вызовомpct_changeвместо (GH 53491)Устаревший
method,limit, иfill_axisключевые слова вDataFrame.align()иSeries.align(), явно вызовитеDataFrame.fillna()илиSeries.fillna()на результатах выравнивания вместо этого (GH 51856)Устаревший
quantileключевое слово вRolling.quantile()иExpanding.quantile(), переименован вqвместо (GH 52550)Устарело принятие срезов в
DataFrame.take(), вызовитеobj[slicer]или передайте последовательность целых чисел вместо (GH 51539)Устаревшее поведение
DataFrame.idxmax(),DataFrame.idxmin(),Series.idxmax(),Series.idxmin()в со всеми-NA записями или любыми-NA иskipna=False; в будущей версии они будут вызыватьValueError(GH 51276)Устарело создание функций, переданных в
Series.agg()попытка выполнить операцию над каждым элементом вSeriesи работают только со всемSeriesесли поэлементные операции завершились неудачно. В будущем функции, переданные вSeries.agg()всегда будет работать со всемSeriesтолько. Чтобы сохранить текущее поведение, используйтеSeries.transform()вместо (GH 53325)Dhruv B Shetty +
DataFrame.agg()попытка выполнить операцию над каждым элементом вDataFrameи работают только со столбцамиDataFrameесли поэлементные операции завершились неудачно. Чтобы сохранить текущее поведение, используйтеDataFrame.transform()вместо (GH 53325)Объявлено устаревшим передача
DataFrametoDataFrame.from_records(), используйтеDataFrame.set_index()илиDataFrame.drop()вместо (GH 51353)Устаревшее тихое игнорирование нераспознанных часовых поясов при парсинге строк в даты и время (GH 18702)
Устарел
axisключевое слово вDataFrame.ewm(),Series.ewm(),DataFrame.rolling(),Series.rolling(),DataFrame.expanding(),Series.expanding()(GH 51778)Устарел
axisключевое слово вDataFrame.resample(),Series.resample()(GH 51778)Устарел
downcastключевое слово вSeries.interpolate(),DataFrame.interpolate(),Series.fillna(),DataFrame.fillna(),Series.ffill(),DataFrame.ffill(),Series.bfill(),DataFrame.bfill()(GH 40988)Устаревшее поведение
concat()с обоимиlen(keys) != len(objs), в будущей версии это вызовет ошибку вместо усечения до более короткой из двух последовательностей (GH 43485)Устаревшее поведение
Series.argsort()в присутствии значений NA; в будущей версии они будут сортироваться в конце вместо выдачи -1 (GH 54219)Устаревшее значение по умолчанию для
observed=FalseвDataFrame.groupby()иSeries.groupby(); это будет по умолчаниюTrueв будущей версии (GH 43999)Устаревание закрепления
group.nameдля каждой группы вSeriesGroupBy.aggregate()агрегации; если ваша операция требует использования ключей группировки, итерируйте по объекту groupby вместо этого (GH 41090)Устарел
axisключевое слово вDataFrameGroupBy.idxmax(),DataFrameGroupBy.idxmin(),DataFrameGroupBy.fillna(),DataFrameGroupBy.take(),DataFrameGroupBy.skew(),DataFrameGroupBy.rank(),DataFrameGroupBy.cumprod(),DataFrameGroupBy.cumsum(),DataFrameGroupBy.cummax(),DataFrameGroupBy.cummin(),DataFrameGroupBy.pct_change(),DataFrameGroupBy.diff(),DataFrameGroupBy.shift(), иDataFrameGroupBy.corrwith(); дляaxis=1работать с базовымиDataFrameвместо (GH 50405, GH 51046)Устаревший
DataFrameGroupByсas_index=Falseне включает группировки в результат, когда они не являются столбцами DataFrame (GH 49519)Устаревший
is_categorical_dtype(), используйтеisinstance(obj.dtype, pd.CategoricalDtype)вместо (GH 52527)Устаревший
is_datetime64tz_dtype(), проверьтеisinstance(dtype, pd.DatetimeTZDtype)вместо (GH 52607)Устаревший
is_int64_dtype(), проверьтеdtype == np.dtype(np.int64)вместо (GH 52564)Устаревший
is_interval_dtype(), проверьтеisinstance(dtype, pd.IntervalDtype)вместо (GH 52607)Устаревший
is_period_dtype(), проверьтеisinstance(dtype, pd.PeriodDtype)вместо (GH 52642)Устаревший
is_sparse(), проверьтеisinstance(dtype, pd.SparseDtype)вместо (GH 52642)Устаревший
Styler.applymap_index(). Используйте новыйStyler.map_index()метод вместо (GH 52708)Устаревший
Styler.applymap(). Используйте новыйStyler.map()метод вместо (GH 52708)Устаревший
DataFrame.applymap(). Используйте новыйDataFrame.map()метод вместо (GH 52353)Устаревший
DataFrame.swapaxes()иSeries.swapaxes(), используйтеDataFrame.transpose()илиSeries.transpose()вместо (GH 51946)Устаревший
freqпараметр вPeriodArrayконструктор, передайтеdtypeвместо (GH 52462)Устаревшее разрешение нестандартных входных данных в
take(), передайте либоnumpy.ndarray,ExtensionArray,Index, илиSeries(GH 52981)Устарело разрешение нестандартных последовательностей для
isin(),value_counts(),unique(),factorize(), преобразовать к одному изnumpy.ndarray,Index,ExtensionArray, илиSeriesперед вызовом (GH 52986)Устаревшее поведение
DataFrameредукцииsum,prod,std,var,semсaxis=None, в будущей версии это будет работать по обеим осям, возвращая скаляр, вместо поведения какaxis=0; обратите внимание, что это также влияет на функции numpy, например.np.sum(df)(GH 21597)Устаревшее поведение
concat()когдаDataFrameимеет столбцы, которые полностью NA, в будущей версии они не будут отбрасываться при определении результирующего dtype (GH 40893)Устаревшее поведение
Series.dt.to_pydatetime(), в будущей версии это вернетSeriesсодержащий pythondatetimeобъекты вместоndarrayдат; это соответствует поведению другихSeries.dtсвойства (GH 20306)Устаревшие логические операции (
|,&,^) между объектами pandas и последовательностями без dtype (например,list,tuple), оберните последовательность вSeriesили массивом NumPy перед операцией вместо (GH 51521)Устаревший параметр
convert_typeвSeries.apply()(GH 52140)Устаревшая передача словаря в
SeriesGroupBy.agg(); передайте список агрегаций вместо (GH 50684)Устарел
fastpathключевое слово вCategoricalконструктор, используйтеCategorical.from_codes()вместо (GH 20110)Устаревшее поведение
is_bool_dtype()возвращаяTrueдля object-dtypeIndexлогических объектов (GH 52680)Устаревшие методы
Series.bool()иDataFrame.bool()(GH 51749)Устаревший неиспользуемый
closedиnormalizeключевые слова вDatetimeIndexконструктор (GH 52628)Устаревший неиспользуемый
closedключевое слово вTimedeltaIndexконструктор (GH 52628)Устаревшая логическая операция между двумя не булевыми
Seriesс разными индексами, всегда приводя результат к типу bool. В будущей версии это будет сохранять тип возвращаемых входных данных (GH 52500, GH 52538)Устаревший
PeriodиPeriodDtypeсBDayfreq, используйтеDatetimeIndexсBDayfreq вместо (GH 53446)Устаревший
value_counts(), используйтеpd.Series(obj).value_counts()вместо (GH 47862)Устаревший
Series.first()иDataFrame.first(); создайте маску и отфильтруйте с помощью.locвместо (GH 45908)Устаревший
Series.interpolate()иDataFrame.interpolate()для object-dtype (GH 53631)Устаревший
Series.last()иDataFrame.last(); создайте маску и отфильтруйте с помощью.locвместо (GH 53692)Устарело разрешение произвольных
fill_valueвSparseDtype, в будущей версииfill_valueдолжен быть совместим сdtype.subtype, либо скаляр, который может содержаться в этом подтипе, либоNaNдля целочисленных или булевых подтипов (GH 23124)Устаревшее разрешение типа данных bool в
DataFrameGroupBy.quantile()иSeriesGroupBy.quantile(), согласованный сSeries.quantile()иDataFrame.quantile()поведение (GH 51424)Устаревшее поведение
testing.assert_series_equal()иtesting.assert_frame_equal()учитывая NA-подобные значения (например,NaNпротивNoneкак эквивалент) (GH 52081)Устаревший ввод байтов в
read_excel(). Чтобы прочитать путь к файлу, используйте строку или объект, подобный пути (GH 53767)Устаревшее построение
SparseArrayиз скалярных данных, передайте последовательность вместо (GH 53039)Устаревшее: откат к заполнению при
valueне указан вDataFrame.replace()иSeries.replace()с не-словареподобнымto_replace(GH 33302)Устаревший литеральный json-ввод в
read_json(). Оберните строковый литерал JSON вio.StringIOвместо (GH 53409)Устаревший ввод строковых литералов в
read_xml(). Оберните строковый/байтовый литерал вio.StringIO/io.BytesIOвместо (GH 53767)Устаревший ввод строковых/байтовых литералов в
read_html(). Оберните строковый/байтовый литерал вio.StringIO/io.BytesIOвместо (GH 53767)Устаревшая опция
mode.use_inf_as_na, преобразовать записи inf вNaNперед вместо (GH 51684)Устаревший параметр
objвDataFrameGroupBy.get_group()(GH 53545)Устаревшее позиционное индексирование на
SeriesсSeries.__getitem__()иSeries.__setitem__(), в будущей версииser[item]будет всегда интерпретироватьitemв качестве метки, а не позиции (GH 50617)Устаревшая замена встроенных и функций NumPy в
.agg,.apply, и.transformиспользуйте соответствующий строковый псевдоним (например"sum"дляsumилиnp.sum) вместо (GH 53425)Устаревшие строки
T,t,Lиlобозначая единицы вto_timedelta()(GH 52536)Устаревшие ключевые слова “method” и “limit” в
.ExtensionArray.fillna, реализовать_pad_or_backfillвместо (GH 53621)Устарел
methodиlimitключевые слова вDataFrame.replace()иSeries.replace()(GH 33302)Устарел
methodиlimitключевые слова наSeries.fillna(),DataFrame.fillna(),SeriesGroupBy.fillna(),DataFrameGroupBy.fillna(), иResampler.fillna(), используйтеobj.bfill()илиobj.ffill()вместо (GH 53394)Устаревшее поведение
Series.__getitem__(),Series.__setitem__(),DataFrame.__getitem__(),DataFrame.__setitem__()с целочисленным срезом объектов с индексом плавающего типа, в будущей версии это будет рассматриваться как позиционный индексирование (GH 49612)Устарело использование неподдерживаемых разрешений datetime64 и timedelta64 с
pandas.array(). Поддерживаемые разрешения: разрешения "s", "ms", "us", "ns" (GH 53058)Устаревшие значения
"pad","ffill","bfill","backfill"дляSeries.interpolate()иDataFrame.interpolate(), используйтеobj.ffill()илиobj.bfill()вместо (GH 53581)Устаревшее поведение
Index.argmax(),Index.argmin(),Series.argmax(),Series.argmin()либо со всеми NA, иskipna=Trueили любые-NA иskipna=Falseвозвращая -1; в будущей версии это вызоветValueError(GH 33941, GH 33942)Устарело разрешение неключевых аргументов в
DataFrame.to_sql()кромеnameиcon(GH 54229)Устаревшее тихое игнорирование
fill_valueпри передаче обоихfreqиfill_valuetoDataFrame.shift(),Series.shift()иDataFrameGroupBy.shift(); в будущей версии это вызоветValueError(GH 53832)
Улучшения производительности#
Улучшение производительности в
concat()с однороднымиnp.float64илиnp.float32типы данных (GH 52685)Улучшение производительности в
factorize()для объектных столбцов, не содержащих строк (GH 51921)Улучшение производительности в
read_orc()при чтении файла по удалённому URI (GH 51609)Улучшение производительности в
read_parquet()иDataFrame.to_parquet()при чтении удаленного файла сengine="pyarrow"(GH 51609)Улучшение производительности в
read_parquet()на строковых столбцах при использованииuse_nullable_dtypes=True(GH 47345)Улучшение производительности в
DataFrame.clip()иSeries.clip()(GH 51472)Улучшение производительности в
DataFrame.filter()когдаitemsуказан (GH 52941)Улучшение производительности в
DataFrame.first_valid_index()иDataFrame.last_valid_index()для типов данных extension array (GH 51549)Улучшение производительности в
DataFrame.where()когдаcondподдерживается расширенным dtype (GH 51574)Улучшение производительности в
MultiIndex.set_levels()иMultiIndex.set_codes()когдаverify_integrity=True(GH 51873)Улучшение производительности в
MultiIndex.sortlevel()когдаascendingявляется списком (GH 51612)Улучшение производительности в
Series.combine_first()(GH 51777)Улучшение производительности в
fillna()когда массив не содержит нулевых значений (GH 51635)Улучшение производительности в
isna()когда массив имеет нулевые null-значения или полностью состоит из null-значений (GH 51630)Улучшение производительности при разборе строк в
boolean[pyarrow]тип данных (GH 51730)Улучшение производительности при поиске
Indexсрезанные из других индексов (GH 51738)Улучшение производительности в
concat()(GH 52291, GH 52290)Periodстандартный форматтер (period_format) теперь значительно (~в два раза) быстрее. Это улучшает производительностьstr(Period),repr(Period), иPeriod.strftime(fmt=None)(), а также.PeriodArray.strftime(fmt=None),.PeriodIndex.strftime(fmt=None)и.PeriodIndex.format(fmt=None).to_csvоперации, включающиеPeriodArrayилиPeriodIndexсо значением по умолчаниюdate_formatтакже значительно ускорены (GH 51459)Улучшение производительности при доступе к
arrays.IntegerArrays.dtype&arrays.FloatingArray.dtype(GH 52998)Улучшение производительности для
DataFrameGroupBy/SeriesGroupByагрегации (например,DataFrameGroupBy.sum()) сengine="numba"(GH 53731)Улучшение производительности в
DataFrameредукции сaxis=1и типы расширений (GH 54341)Улучшение производительности в
DataFrameредукции сaxis=Noneи типы расширений (GH 54308)Улучшение производительности в
MultiIndexи операции с несколькими столбцами (например,DataFrame.sort_values(),DataFrame.groupby(),Series.unstack()) когда значения индекса/столбцов уже отсортированы (GH 53806)Улучшение производительности в
concat()когдаaxis=1и объекты имеют разные индексы (GH 52541)Улучшение производительности в
concat()когда ось конкатенации являетсяMultiIndex(GH 53574)Улучшение производительности в
merge()для строк на основе PyArrow (GH 54443)Улучшение производительности в
read_csv()сengine="c"(GH 52632)Улучшение производительности в
ArrowExtensionArray.to_numpy()(GH 52525)Улучшение производительности в
DataFrameGroupBy.groups()(GH 53088)Улучшение производительности в
DataFrame.astype()когдаdtypeявляется расширенным типом данных (GH 54299)Улучшение производительности в
DataFrame.iloc()когда входные данные - одно целое число, а dataframe использует расширенные типы данных (GH 54508)Улучшение производительности в
DataFrame.isin()для типов расширений (GH 53514)Улучшение производительности в
DataFrame.loc()при выборе строк и столбцов (GH 53014)Улучшение производительности в
DataFrame.transpose()при транспонировании DataFrame с одним типом данных PyArrow (GH 54224)Улучшение производительности в
DataFrame.transpose()при транспонировании DataFrame с одним маскированным типом данных, напримерInt64(GH 52836)Улучшение производительности в
Series.add()для типов данных PyArrow string и binary (GH 53150)Улучшение производительности в
Series.corr()иSeries.cov()для типов расширений (GH 52502)Улучшение производительности в
Series.drop_duplicates()дляArrowDtype(GH 54667).Улучшение производительности в
Series.ffill(),Series.bfill(),DataFrame.ffill(),DataFrame.bfill()с типами данных PyArrow (GH 53950)Улучшение производительности в
Series.str.get_dummies()для строк на основе PyArrow (GH 53655)Улучшение производительности в
Series.str.get()для строк на основе PyArrow (GH 53152)Улучшение производительности в
Series.str.split()сexpand=Trueдля строк на основе PyArrow (GH 53585)Улучшение производительности в
Series.to_numpy()когда dtype является вещественным типом NumPy иna_valueявляетсяnp.nan(GH 52430)Улучшение производительности в
astype()при преобразовании из PyArrow timestamp или duration dtype в NumPy (GH 53326)Улучшение производительности в различных
MultiIndexоперации с множествами и индексированием (GH 53955)Улучшение производительности при выполнении различных операций преобразования на
arrays.IntegerArray&arrays.FloatingArrayизбегая ненужной проверки (GH 53013)Улучшение производительности при индексировании с типами данных PyArrow timestamp и duration (GH 53368)
Улучшение производительности при передаче массива в
RangeIndex.take(),DataFrame.loc(), илиDataFrame.iloc()и DataFrame использует RangeIndex (GH 53387)
Исправления ошибок#
Категориальный#
Ошибка в
CategoricalIndex.remove_categories()где упорядоченные категории не сохранялись (GH 53935).Ошибка в
Series.astype()сdtype="category"для массивов с поддержкой null значений с масками только для чтения (GH 53658)Ошибка в
Series.map(), где значениеna_actionпараметр не использовался, если серия содержалаCategorical(GH 22527).
Datetimelike#
DatetimeIndex.map()сna_action="ignore"теперь работает как ожидалось (GH 51644)DatetimeIndex.slice_indexer()теперь вызываетKeyErrorдля немонотонных индексов, если любая из границ среза отсутствует в индексе; это поведение ранее было устаревшим, но обрабатывалось непоследовательно (GH 53983)Ошибка в
DateOffsetкоторый имел непоследовательное поведение при умноженииDateOffsetобъект на константу (GH 47953)Ошибка в
date_range()когдаfreqбылDateOffsetсnanoseconds(GH 46877)Ошибка в
to_datetime()преобразованиеSeriesилиDataFrameсодержащийarrays.ArrowExtensionArrayPyArrow-меток времени в numpy-даты (GH 52545)Ошибка в
DatetimeArray.map()иDatetimeIndex.map(), где предоставленный вызываемый объект работал с массивами, а не поэлементно (GH 51977)Ошибка в
DataFrame.to_sql()вызовValueErrorдля типов данных, связанных с датами на основе PyArrow (GH 53854)Ошибка в
Timestamp.date(),Timestamp.isocalendar(),Timestamp.timetuple(), иTimestamp.toordinal()возвращали некорректные результаты для входных данных вне тех, которые поддерживаются модулем datetime стандартной библиотеки Python (GH 53668)Ошибка в
Timestamp.round()со значениями, близкими к границам реализации, возвращающими некорректные результаты вместо вызова исключенияOutOfBoundsDatetime(GH 51494)Ошибка при построении
SeriesилиDataFrameиз скаляра datetime или timedelta, всегда определяя наносекундное разрешение вместо определения из входных данных (GH 52212)Ошибка при построении
Timestampиз строки, представляющей время без даты, определяется некорректная единица измерения (GH 54097)Ошибка при построении
Timestampсts_input=pd.NAвызовTypeError(GH 45481)Ошибка при разборе строк даты-времени с днем недели, но без дня, например, "2023 Sept Thu" неправильно вызывает
AttributeErrorвместоValueError(GH 52659)Ошибка в repr для
Seriesкогда dtype является datetime с учетом часового пояса и не-наносекундным разрешением, вызываяOutOfBoundsDatetime(GH 54623)
Timedelta#
Ошибка в
TimedeltaIndexделение или умножение, приводящее к.freqвместо "0 дней"None(GH 51575)Ошибка в
Timedeltaс NumPytimedelta64объекты, некорректно вызывающиеValueError(GH 52806)Ошибка в
to_timedelta()преобразованиеSeriesилиDataFrameсодержащийArrowDtypeofpyarrow.durationв NumPytimedelta64(GH 54298)Ошибка в
Timedelta.__hash__(), вызываяOutOfBoundsTimedeltaна определенных больших значениях секундного разрешения (GH 54037)Ошибка в
Timedelta.round()со значениями, близкими к границам реализации, возвращающими некорректные результаты вместо вызова исключенияOutOfBoundsTimedelta(GH 51494)Ошибка в
TimedeltaIndex.map()сna_action="ignore"(GH 51644)Ошибка в
arrays.TimedeltaArray.map()иTimedeltaIndex.map(), где предоставленный вызываемый объект работал с массивами, а не поэлементно (GH 51977)
Часовые пояса#
Ошибка в
infer_freq()который вызываетTypeErrorдляSeriesвременных меток с учетом часового пояса (GH 52456)Ошибка в
DatetimeTZDtype.base()который всегда возвращает тип данных NumPy с наносекундным разрешением (GH 52705)
Числовой#
Ошибка в
RangeIndexустановкаstepнекорректно, когда является вычитаемым при уменьшаемом числовом значении (GH 53255)Ошибка в
Series.corr()иSeries.cov()вызовAttributeErrorдля маскированных типов данных (GH 51422)Ошибка при вызове
Series.kurt()иSeries.skew()на данных NumPy, состоящих из всех нулей, возвращает тип Python вместо типа NumPy (GH 53482)Ошибка в
Series.mean(),DataFrame.mean()со значениями object-dtype, содержащими строки, которые можно преобразовать в числа (например, "2"), возвращая некорректные числовые результаты; теперь они вызываютTypeError(GH 36703, GH 44008)Ошибка в
DataFrame.corrwith()вызовNotImplementedErrorдля типов данных на основе PyArrow (GH 52314)Ошибка в
DataFrame.size()иSeries.size()возвращает 64-битное целое число вместо целого числа Python (GH 52897)Ошибка в
DateFrame.dot()возвращаяobjectdtype дляArrowDtypeданные (GH 53979)Ошибка в
Series.any(),Series.all(),DataFrame.any(), иDataFrame.all()имел значение по умолчаниюbool_onlyустановлено вNoneвместоFalse; это изменение не должно повлиять на пользователей (GH 53258)Ошибка в
Series.corr()иSeries.cov()вызовAttributeErrorдля маскированных типов данных (GH 51422)Ошибка в
Series.median()иDataFrame.median()со значениями object-dtype, содержащими строки, которые можно преобразовать в числа (например, "2"), возвращая некорректные числовые результаты; теперь они вызываютTypeError(GH 34671)Ошибка в
Series.sum()преобразование типа данныхuint64toint64(GH 53401)
Преобразование#
Ошибка в
DataFrame.style.to_latex()иDataFrame.style.to_html()если DataFrame содержит целые числа с большим количеством цифр, чем может быть представлено двойной точностью с плавающей запятой (GH 52272)Ошибка в
array()когда заданdatetime64илиtimedelta64dtype с единицей измерения "s", "us" или "ms", возвращающийNumpyExtensionArrayвместоDatetimeArrayилиTimedeltaArray(GH 52859)Ошибка в
array()при передаче пустого списка и отсутствии типа данных, возвращаяNumpyExtensionArrayвместоFloatingArray(GH 54371)Ошибка в
ArrowDtype.numpy_dtype()возврат наносекундных единиц для ненаносекундныхpyarrow.timestampиpyarrow.durationтипы (GH 51800)Ошибка в
DataFrame.__repr__()некорректно вызывалTypeErrorкогда тип данных столбцаnp.record(GH 48526)Ошибка в
DataFrame.info()вызовValueErrorкогдаuse_numbaустановлен (GH 51922)Ошибка в
DataFrame.insert()вызовTypeErroriflocявляетсяnp.int64(GH 53193)Ошибка в
HDFStore.select()теряет точность больших целых чисел при хранении и извлечении (GH 54186)Ошибка в
Series.astype()не поддерживаяobject_(GH 54251)
Строки#
Ошибка в
Series.str()который не вызывалTypeErrorпри итерации (GH 54173)Ошибка в
reprдляDataFrame`со столбцами строкового типа данных (GH 54797)
Interval#
IntervalIndex.get_indexer()иIntervalIndex.get_indexer_nonunique()вызывая исключение, еслиtargetявляется массивом только для чтения (GH 53703)Ошибка в
IntervalDtypeгде объект мог оставаться активным при удалении (GH 54184)Ошибка в
interval_range()где floatstepможет создавать некорректные интервалы из-за артефактов с плавающей точкой (GH 54477)
Индексирование#
Ошибка в
DataFrame.__setitem__()потеря типа данных при установкеDataFrameв дублирующиеся столбцы (GH 53143)Ошибка в
DataFrame.__setitem__()с булевой маской иDataFrame.putmask()со смешанными нечисловыми типами данных и значением, отличным отNaNнекорректное возбуждениеTypeError(GH 53291)Ошибка в
DataFrame.iloc()при использованииnanкак единственный элемент (GH 52234)Ошибка в
Series.loc()приведение типовSeriestonp.dnarrayпри присваиванииSeriesпо предопределённому индексуobjectdtypeSeries(GH 48933)
Отсутствует#
Ошибка в
DataFrame.interpolate()не удалось заполнить данные приmethodявляется"pad","ffill","bfill", или"backfill"(GH 53898)Ошибка в
DataFrame.interpolate()игнорируяinplaceкогдаDataFrameпуст (GH 53199)Ошибка в
Series.idxmin(),Series.idxmax(),DataFrame.idxmin(),DataFrame.idxmax()сDatetimeIndexиндекс, содержащийNaTнекорректно возвращаетNaNвместоNaT(GH 43587)Ошибка в
Series.interpolate()иDataFrame.interpolate()не удалось вызвать исключение при недопустимомdowncastключевое слово, которое может быть толькоNoneили"infer"(GH 53103)Ошибка в
Series.interpolate()иDataFrame.interpolate()с комплексным типом данных, некорректно не заполняяNaNзаписи (GH 53635)
MultiIndex#
Ошибка в
MultiIndex.set_levels()не сохраняя типы данных дляCategorical(GH 52125)Ошибка при отображении
MultiIndexс длинным элементом (GH 52960)
I/O#
DataFrame.to_orc()теперь вызываетValueErrorпри нестандартномIndexуказан (GH 51828)DataFrame.to_sql()теперь вызываетValueErrorкогда параметр name оставлен пустым при использовании SQLAlchemy для подключения (GH 52675)Ошибка в
json_normalize()не мог разобрать поля метаданных типа списка (GH 37782)Ошибка в
read_csv()где это вызвало бы ошибку, когдаparse_datesбыл установлен в список или словарь сengine="pyarrow"(GH 47961)Ошибка в
read_csv()сengine="pyarrow"вызов исключения при указанииdtypeсindex_col(GH 53229)Ошибка в
read_hdf()неправильное закрытие хранилища послеIndexErrorвозникает (GH 52781)Ошибка в
read_html()где элементы стиля были прочитаны в DataFrames (GH 52197)Ошибка в
read_html()где конечные тексты удалялись вместе с элементами, содержащимиdisplay:noneстиль (GH 51629)Ошибка в
read_sql_table()вызов исключения при чтении представления (GH 52969)Ошибка в
read_sql()при чтении нескольких столбцов с часовыми поясами с одинаковым именем столбца (GH 44421)Ошибка в
read_xml()удаление пробелов в строковых данных (GH 53811)Ошибка в
DataFrame.to_html()гдеcolspaceбыл некорректно применен в случае многоиндексных столбцов (GH 53885)Ошибка в
DataFrame.to_html()где преобразование для пустогоDataFrameс комплексным dtype вызывалValueError(GH 54167)Ошибка в
DataFrame.to_json()гдеDateTimeArray/DateTimeIndexс точностью не в наносекундах не могли быть правильно сериализованы (GH 53686)Ошибка при записи и чтении пустых файлов Stata dta, где информация о типе данных была потеряна (GH 46240)
Ошибка, где
bz2рассматривалось как жесткое требование (GH 53857)
Period#
Ошибка в
PeriodDtypeконструктор не смог вызватьTypeErrorкогда аргумент не передается или когдаNoneпередается (GH 27388)Ошибка в
PeriodDtypeконструктор неправильно возвращал тот жеnormalizeдля разныхDateOffsetfreqвходные данные (GH 24121)Ошибка в
PeriodDtypeконструктор вызываетValueErrorвместоTypeErrorкогда передается недопустимый тип (GH 51790)Ошибка в
PeriodDtypeгде объект мог оставаться активным при удалении (GH 54184)Ошибка в
read_csv()не обрабатывать пустые строки как нулевое значение, сengine="pyarrow"(GH 52087)Ошибка в
read_csv()возвращаяobjectстолбцы типа dtype вместоfloat64столбцы dtype сengine="pyarrow"для столбцов, которые полностью состоят из nullengine="pyarrow"(GH 52087)Ошибка в
Period.now()не принимаяfreqпараметр в качестве аргумента ключевого слова (GH 53369)Ошибка в
PeriodIndex.map()сna_action="ignore"(GH 51644)Ошибка в
arrays.PeriodArray.map()иPeriodIndex.map(), где предоставленный вызываемый объект работал с массивами, а не поэлементно (GH 51977)Ошибка в некорректном разрешении создания
PeriodилиPeriodDtypeсCustomBusinessDayчастота; используйтеBusinessDayвместо (GH 52534)
Построение графиков#
Ошибка в
Series.plot()при вызове сcolor=None(GH 51953)Исправлено UserWarning в
DataFrame.plot.scatter()при вызове сc="b"(GH 53908)
Groupby/resample/rolling#
Ошибка в
DataFrameGroupBy.idxmin(),SeriesGroupBy.idxmin(),DataFrameGroupBy.idxmax(),SeriesGroupBy.idxmax()возвращает неправильный dtype при использовании на пустом DataFrameGroupBy или SeriesGroupBy (GH 51423)Ошибка в
DataFrame.groupby.rank()на допускающих null типах данных при передачеna_option="bottom"илиna_option="top"(GH 54206)Ошибка в
DataFrame.resample()иSeries.resample()неправильно разрешая нефиксированныеfreqпри передискретизации наTimedeltaIndex(GH 51896)Ошибка в
DataFrame.resample()иSeries.resample()потеря часового пояса при ресемплинге пустых данных (GH 53664)Ошибка в
DataFrame.resample()иSeries.resample()гдеoriginне оказывает влияния при ресемплинге, когда значения находятся за пределами оси (GH 53662)Ошибка в взвешенных скользящих агрегациях при указании
min_periods=0(GH 51449)Ошибка в
DataFrame.groupby()иSeries.groupby()где, когда индекс сгруппированногоSeriesилиDataFrameбылDatetimeIndex,TimedeltaIndexилиPeriodIndexдолжны быть включены в старые категории. Значения, которые были в удаленных категориях, будут установлены в NaNgroupbyметоду была передана функция в качестве первого аргумента, функция работала со всем индексом, а не с каждым элементом индекса (GH 51979)Ошибка в
DataFrameGroupBy.agg()со списками, не учитывающимиas_index=False(GH 52849)Ошибка в
DataFrameGroupBy.apply()вызывает ошибку при вводеDataFrameAlejandro Giacometti +DataFrameпосле groupby ([['a']]и не['a']) и заданная вызываемая функция возвращалаSeriesкоторые не были все проиндексированы одинаково (GH 52444)Ошибка в
DataFrameGroupBy.apply()вызовTypeErrorпри выборе нескольких столбцов и предоставлении функции, которая возвращаетnp.ndarrayрезультаты (GH 18930)Ошибка в
DataFrameGroupBy.groups()иSeriesGroupBy.groups()с ключом datetime в сочетании с другим ключом давало некорректное количество групповых ключей (GH 51158)Ошибка в
DataFrameGroupBy.quantile()иSeriesGroupBy.quantile()может неявно сортировать результирующий индекс сsort=False(GH 53009)Ошибка в
SeriesGroupBy.size()где dtype будетnp.int64для данных сArrowDtypeили маскированные dtypes (например,Int64) (GH 53831)Ошибка в
DataFrame.groupby()с выбором столбца в результирующем объекте groupby, не возвращающим имена в виде кортежей при группировке по списку, состоящему из одного элемента (GH 53500)Ошибка в
DataFrameGroupBy.var()иSeriesGroupBy.var()не удалось вызватьTypeErrorпри вызове с datetime64, timedelta64 илиPeriodDtypeзначения (GH 52128, GH 53045)Ошибка в
DataFrameGroupBy.resample()сkind="period"вызовAttributeError(GH 24103)Ошибка в
Resampler.ohlc()с пустым объектом, возвращающимSeriesвместо пустогоDataFrame(GH 42902)Ошибка в
SeriesGroupBy.count()иDataFrameGroupBy.count()где dtype будетnp.int64для данных сArrowDtypeили маскированные dtypes (например,Int64) (GH 53831)Ошибка в
SeriesGroupBy.nth()иDataFrameGroupBy.nth()после выполнения выбора столбцов при использованииdropna="any"илиdropna="all"не выбирал подмножество столбцов (GH 53518)Ошибка в
SeriesGroupBy.nth()иDataFrameGroupBy.nth()вызывается после выполнения выбора столбцов при использованииdropna="any"илиdropna="all"привело к удалению строк (GH 53518)Ошибка в
SeriesGroupBy.sum()иDataFrameGroupBy.sum()суммированиеnp.inf + np.infи(-np.inf) + (-np.inf)tonp.nanвместоnp.infи-np.infсоответственно (GH 53606)Ошибка в
Series.groupby()вызов ошибки при группировкеSeriesимеетDatetimeIndexиндекс иSeriesс именем, которое является месяцем, передается вbyаргумент (GH 48509)
Изменение формы#
Ошибка в
concat()приведение кobjectdtype, когда один столбец имеетpa.null()тип данных (GH 53702)Ошибка в
crosstab()когдаdropna=Falseне сохранял быnp.nanв результате (GH 10772)Ошибка в
melt()гдеvariableстолбец потеряет типы данных расширений (GH 54297)Ошибка в
merge_asof()вызовKeyErrorдля типов расширений (GH 52904)Ошибка в
merge_asof()вызовValueErrorдля данных, поддерживаемых доступными только для чтения ndarrays (GH 53513)Ошибка в
merge_asof()сleft_index=Trueилиright_index=Trueс несовпадающими типами индексов, дающими неверные результаты в некоторых случаях, вместо вызоваMergeError(GH 53870)Ошибка в
merge()при слиянии по целочисленномуExtensionDtypeи тип данных NumPy с плавающей запятой вызываетTypeError(GH 46178)Ошибка в
DataFrame.agg()иSeries.agg()на неуникальных столбцах возвращал некорректный тип при передаче аргумента, похожего на dist (GH 51099)Ошибка в
DataFrame.combine_first()игнорируя столбцы других, еслиotherпуст (GH 53792)Ошибка в
DataFrame.idxmin()иDataFrame.idxmax(), где тип оси терялся для пустых фреймов (GH 53265)Ошибка в
DataFrame.merge()неправильное слияние при наличииMultiIndexс одним уровнем (GH 52331)Ошибка в
DataFrame.stack()потеря типов данных расширений, когда столбцы являютсяMultiIndexи фрейм содержит смешанные типы данных (GH 45740)Ошибка в
DataFrame.stack()сортировка столбцов лексикографически (GH 53786)Ошибка в
DataFrame.transpose()определение типа данных для столбца объекта (GH 51546)Ошибка в
Series.combine_first()преобразованиеint64dtype вfloat64и потерю точности на очень больших целых числах (GH 51764)Ошибка при объединении пустых
DataFrameобъекты, где объединённый индекс будетRangeIndexвместо типа объединенного индекса (GH 52777)
Разреженный#
Ошибка в
SparseDtypeконструктор не смог вызватьTypeErrorпри задании несовместимогоdtypeдля его подтипа, который должен быть типом данных NumPy (GH 53160)Ошибка в
arrays.SparseArray.map()позволял включать значение заполнения в разреженные значения (GH 52095)
ExtensionArray#
Ошибка в
ArrowStringArrayконструктор вызываетValueErrorсо словарными типами строк (GH 54074)Ошибка в
DataFrameконструктор не копируетSeriesс расширением dtype при задании в словаре (GH 53744)Ошибка в
ArrowExtensionArrayпреобразование pandas-объектов временных типов не-наносекундного диапазона из ненулевых значений в нулевые (GH 53171)Ошибка в
Series.quantile()для типов временных данных PyArrow вызываетArrowInvalid(GH 52678)Ошибка в
Series.rank()возвращает неправильный порядок для малых значений сFloat64тип данных (GH 52471)Ошибка в
Series.unique()для булевыхArrowDtypeсNAзначения (GH 54667)Ошибка в
__iter__()и__getitem__()возвращение объектов python datetime и timedelta для типов данных не-нано (GH 53326)Ошибка в
factorize()возвращал некорректные уникальные значения дляpyarrow.dictionaryтипpyarrow.chunked_arrayс более чем одним чанком (GH 54844)Ошибка при передаче
ExtensionArrayподкласс дляdtypeключевые слова. Теперь это вызоветUserWarningчтобы поощрять передачу экземпляра вместо (GH 31356, GH 54592)Ошибка, при которой
DataFramerepr не работал, когда столбец имелArrowDtypeсpyarrow.ExtensionDtype(GH 54063)Ошибка, при которой
__from_arrow__метод маскированных ExtensionDtypes (например,Float64Dtype,BooleanDtype) не принимал бы массивы PyArrow типаpyarrow.null()(GH 52223)
Styler#
Метаданные#
Исправлено распространение фиксированных метаданных в
DataFrame.max(),DataFrame.min(),DataFrame.prod(),DataFrame.mean(),Series.mode(),DataFrame.median(),DataFrame.sem(),DataFrame.skew(),DataFrame.kurt()(GH 28283)Исправлено распространение фиксированных метаданных в
DataFrame.squeeze(), иDataFrame.describe()(GH 28283)Исправлено распространение фиксированных метаданных в
DataFrame.std()(GH 28283)
Другие#
Ошибка в
FloatingArray.__contains__сNaNэлемент неправильно возвращаетFalseкогдаNaNзначения присутствуют (GH 52840)Ошибка в
DataFrameиSeriesвызов исключения для данных комплексного dtype, когдаNaNзначения присутствуют (GH 53627)Ошибка в
DatetimeIndexгдеreprиндекса, переданного со временем, не выводит время, если это полночь и частота не основана на днях (GH 53470)Ошибка в
testing.assert_frame_equal()иtesting.assert_series_equal()теперь вызывает ошибку утверждения для двух неравных наборов (GH 51727)Ошибка в
testing.assert_frame_equal()проверяет категориальные типы данных даже при запросе не проверять тип индекса (GH 52126)Ошибка в
api.interchange.from_dataframe()не учитывалallow_copyаргумент (GH 54322)Ошибка в
api.interchange.from_dataframe()вызывало ошибку при обмене из не-pandas данных с учетом часового пояса, содержащих нулевые значения (GH 54287)Ошибка в
api.interchange.from_dataframe()при преобразовании пустого объекта DataFrame (GH 53155)Ошибка в
from_dummies()где результирующийIndexне соответствовал оригиналуIndex(GH 54300)Ошибка в
from_dummies()где результирующие данные всегда будутobjectdtype вместо dtype столбцов (GH 54300)Ошибка в
DataFrameGroupBy.first(),DataFrameGroupBy.last(),SeriesGroupBy.first(), иSeriesGroupBy.last()где пустая группа возвращала быnp.nanвместо соответствующегоExtensionArrayзначение NA (GH 39098)Ошибка в
DataFrame.pivot_table()с приведением среднего значений int обратно к int (GH 16676)Ошибка в
DataFrame.reindex()сfill_valueкоторые должны быть выведены с помощьюExtensionDtypeнеправильно определяяobjectтип данных (GH 52586)Ошибка в
DataFrame.shift()сaxis=1наDataFrameс однимExtensionDtypeстолбец выдает некорректные результаты (GH 53832)Ошибка в
Index.sort_values()когдаkeyпередается (GH 52764)Ошибка в
Series.align(),DataFrame.align(),Series.reindex(),DataFrame.reindex(),Series.interpolate(),DataFrame.interpolate(), некорректно не вызывая исключение с method=”asfreq” (GH 53620)Ошибка в
Series.argsort()не удалось вызвать исключение при недопустимомaxisпередается (GH 54257)Ошибка в
Series.map()при передаче вызываемого объекта в пустую серию, возвращаемая серия имелаobjectтип данных. Теперь он сохраняет исходный тип данных (GH 52384)Ошибка в
Series.memory_usage()когдаdeep=Trueвыдаёт ошибку с Series объектов, и возвращаемое значение некорректно, так как не учитывает поправки GC (GH 51858)Ошибка в
period_range()поведение по умолчанию, когда freq не передавался как аргумент, было некорректным (GH 53687)Исправлена некорректная
__name__атрибутpandas._libs.json(GH 52898)
Участники#
Всего 266 человек внесли патчи в этот релиз. Люди с "+" рядом с их именами внесли патч впервые.
AG +
Аарни Коскела
Adrian D’Alessandro +
Адриен РУО +
Ahmad +
Aidos Kanapyanov +
Alex Malins
Александр Зайлер +
Ali Asgar +
Allison Kwan
Amanda Bizzinotto +
Andres Algaba +
Angela Seo +
Anirudh Hegde +
Antony Evmorfopoulos +
Анушка Бишной
ArnaudChanoine +
Artem Vorobyev +
Arya Sarkar +
Ashwin Srinath
Austin Au-Yeung +
Austin Burnett +
Беар +
Ben Mangold +
Bernardo Gameiro +
Boyd Kane +
Брайан Александр Муньос Б +
Brock
Chetan0402 +
Chris Carini
ChristofKaufmann
Кларк-В +
Конрад Макги Стокс
Corrie Bartelheimer +
Coulton Theuer +
D067751 +
Daniel Isaac
Даниэле Николоди +
David Samuel +
David Seifert +
Dea Leon +
Dea María Léon
Deepyaman Datta
Denis Sapozhnikov +
Dharani Akurathi +
DimiGrammatikakis +
Dirk Ulbricht +
Dmitry Shemetov +
Dominik Berger
Efkan S. Goktepe +
Ege Özgüroğlu
Eli Schwartz
Erdi +
Fabrizio Primerano +
Facundo Batista +
Fangchen Li
Фелипе Майон +
Francis +
Future Programmer +
Gabriel Kabbe +
Gaétan Ramet +
Gianluca Ficarelli
Godwill Agbehonou +
Guillaume Lemaitre
Guo Ci
Густаво Варгас +
Hamidreza Sanaee +
HappyHorse +
Harald Husum +
Hugo van Kemenade
Ido Ronen +
Ирв Ластиг
Дж.Х.М. Дарбишир
JHM Darbyshire (iMac)
JJ +
Jarrod Millman
Джей +
Jeff Reback
Jessica Greene +
Цзявэй Чжан +
Jinli Xiao +
Joanna Ge +
Jona Sassenhagen +
Jonas Haag
Joris Van den Bossche
Joshua Shew +
Julian Badillo
Джулиан Ортис +
Julien Palard +
Justin Tyson +
Юстус Магин
Kabiir Krishna +
Kang Su Min
Ketu Patel +
Кевин +
Кевин Андерсон
Kevin Jan Anker
Кевин Кляйн +
Кевин Шеппард
Kostya Farber
LM +
Lars Lien Ankile +
Lawrence Mitchell
Liwei Cai +
Loic Diridollou
Luciana Solorzano +
Люк Мэнли
Lumberbot (он же Джек)
Марат Копытюк +
Марк Гарсия
Marco Edward Gorelli
Марко Горелли
Maria Telenczuk +
МарвинГраверт +
Mateusz Sokół +
Мэтт Ричардс
Мэтью Барбер +
Мэтью Рёшке
Matus Valo +
Миа Реймер +
Michael Terry +
Michael Tiemann +
Milad Maani Jou +
Miles Cranmer +
Мирия Х +
Miyuu +
Natalia Mokeeva
передан, read_json теперь возвращает итератор, который читает
Никлаус Роуч +
Nicolas Camenisch +
Николай Боев +
Нирав
Nishu Choudhary
Noa Tamir
Ной Ханан +
Numan +
Numan Ijaz +
Omar Elbaz +
Команда разработчиков Pandas
Парфе Гасана
Parthi
Patrick Hoefler
Patrick Schleiter +
Pawel Kranzberg +
Philip
Philip Meier +
Pranav Saibhushan Ravuri
PrathumP +
Rahul Siloniya +
Rajasvi Vinayak +
Rajat Subhra Mukherjee +
Ralf Gommers
RaphSku
Ребекка Чен +
Renato Cotrim Maciel +
Reza (Milad) Maanijou +
Richard Shadrach
Ритик Редди +
Robert Luce +
Ronalido +
Rylie Wei +
СОУМЬЯДИП МАЛ +
Sanjith Chockan +
Sayed Qaiser Ali +
Scott Harp +
Se +
Shashwat Agrawal
Simar Bassi +
Simon Brugman +
Simon Hawkins
Simon Høxbro Hansen
Snorf Yang +
Sortofamudkip +
Stefan Krawczyk
Stefanie Molin
Stefanie Senger
Stelios Petrakis +
Stijn Van Hoey
Sven
Sylvain MARIE
Sylvain Marié
Терджи Петерсен
Thierry Moisan
Thomas
Thomas A Caswell
Томас Грейнджер
Thomas Li
Thomas Vranken +
Tianye Song +
Tim Hoffmann
Tim Loderhose +
Tim Swast
Timon Jurschitsch +
Tolker-KU +
Tomas Pavlik +
Toroi +
Torsten Wörtwein
Travis Gibbs +
Umberto Fasci +
Valerii +
VanMyHu +
Victor Momodu +
Вижай Вайдьянатан +
VomV +
William Andrea
William Ayd
Вольф Бехренхофф +
Xiao Yuan
Yao Xiao
Yasin Tatar
Yaxin Li +
Yi Wei +
Юлия +
Yusharth Singh +
Zach Breger +
Zhengbo Wang
abokey1 +
ahmad2901 +
assafam +
auderson
august-tengland +
bunardsheng +
cmmck +
cnguyen-03 +
coco +
dependabot[bot]
giplessis +
github-actions[bot]
gmaiwald +
gmollard +
jbrockmendel
kathleenhang
kevx82 +
lia2710 +
liang3zy22 +
ltartaro +
lusolorz +
m-ganko +
mKlepsch +
mattkeanny +
mrastgoo +
nabdoni +
omar-elbaz +
paulreece +
penelopeysm +
potap75 +
pre-commit-ci[bot] +
raanasn +
raj-thapa +
ramvikrams +
rebecca-palmer
reddyrg1 +
rmhowe425 +
segatrade +
GH 13374
sweisss +
taytzehao
tntmatthews +
tpaxman +
tzehaoo +
v-mcoutinho +
wcgonzal +
yonashub
yusharth +
Адам Липпаи
Штепан Мюллер +