Что нового в версии 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 изменяет Series inplace (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.

Предыдущая реализация имела два основных поведенческих недостатка.

  1. Предыдущая реализация излишне добавляла значения NA в результат. Пользователь мог автоматически удалить значения NA, передав dropna=True (по умолчанию), но это также может удалить значения NA из результата, которые существовали во входных данных. См. примеры ниже.

  2. Предыдущая реализация с sort=True (по умолчанию) иногда сортировал часть результирующего индекса, а иногда нет. Если столбцы входных данных не a MultiIndex, тогда результирующий индекс никогда не будет отсортирован. Если столбцы являются 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

Другие улучшения#

Обратно несовместимые изменения 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 и прикрепленное имя типа данных изменилось с PandasDtype to NumpyEADtype; импорт 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 или PeriodDtype 0.411 Series и 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)

  • Устаревшая явная поддержка наследования Index (GH 45289)

  • Устарело создание функций, переданных в Series.agg() попытка выполнить операцию над каждым элементом в Series и работают только со всем Series если поэлементные операции завершились неудачно. В будущем функции, переданные в Series.agg() всегда будет работать со всем Series только. Чтобы сохранить текущее поведение, используйте Series.transform() вместо (GH 53325)

  • Dhruv B Shetty + DataFrame.agg() попытка выполнить операцию над каждым элементом в DataFrame и работают только со столбцами DataFrame если поэлементные операции завершились неудачно. Чтобы сохранить текущее поведение, используйте DataFrame.transform() вместо (GH 53325)

  • Объявлено устаревшим передача DataFrame to DataFrame.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 содержащий python datetime объекты вместо 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-dtype Index логических объектов (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 с BDay freq, используйте DatetimeIndex с BDay freq вместо (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_value to DataFrame.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)

  • Улучшение производительности в Series редукции (GH 52341)

  • Улучшение производительности в 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.ArrowExtensionArray PyArrow-меток времени в 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 с NumPy timedelta64 объекты, некорректно вызывающие ValueError (GH 52806)

  • Ошибка в to_timedelta() преобразование Series или DataFrame содержащий ArrowDtype of pyarrow.duration в NumPy timedelta64 (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() возвращая object dtype для 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() преобразование типа данных uint64 to int64 (GH 53401)

Преобразование#

  • Ошибка в DataFrame.style.to_latex() и DataFrame.style.to_html() если DataFrame содержит целые числа с большим количеством цифр, чем может быть представлено двойной точностью с плавающей запятой (GH 52272)

  • Ошибка в array() когда задан datetime64 или timedelta64 dtype с единицей измерения "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() вызов TypeError if loc является 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() где float step может создавать некорректные интервалы из-за артефактов с плавающей точкой (GH 54477)

Индексирование#

  • Ошибка в DataFrame.__setitem__() потеря типа данных при установке DataFrame в дублирующиеся столбцы (GH 53143)

  • Ошибка в DataFrame.__setitem__() с булевой маской и DataFrame.putmask() со смешанными нечисловыми типами данных и значением, отличным от NaN некорректное возбуждение TypeError (GH 53291)

  • Ошибка в DataFrame.iloc() при использовании nan как единственный элемент (GH 52234)

  • Ошибка в Series.loc() приведение типов Series to np.dnarray при присваивании Series по предопределённому индексу object dtype Series (GH 48933)

Отсутствует#

MultiIndex#

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 для разных DateOffset freq входные данные (GH 24121)

  • Ошибка в PeriodDtype конструктор вызывает ValueError вместо TypeError когда передается недопустимый тип (GH 51790)

  • Ошибка в PeriodDtype где объект мог оставаться активным при удалении (GH 54184)

  • Ошибка в read_csv() не обрабатывать пустые строки как нулевое значение, с engine="pyarrow" (GH 52087)

  • Ошибка в read_csv() возвращая object столбцы типа dtype вместо float64 столбцы dtype с engine="pyarrow" для столбцов, которые полностью состоят из null engine="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)

Построение графиков#

Groupby/resample/rolling#

Изменение формы#

  • Ошибка в concat() приведение к object dtype, когда один столбец имеет 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() преобразование int64 dtype в 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)

  • Ошибка, при которой DataFrame repr не работал, когда столбец имел ArrowDtype с pyarrow.ExtensionDtype (GH 54063)

  • Ошибка, при которой __from_arrow__ метод маскированных ExtensionDtypes (например, Float64Dtype, BooleanDtype) не принимал бы массивы PyArrow типа pyarrow.null() (GH 52223)

Styler#

  • Ошибка в Styler._copy() вызов переопределенных методов в подклассах Styler (GH 52728)

Метаданные#

Другие#

  • Ошибка в 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() где результирующие данные всегда будут object dtype вместо 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 +

  • Адам Липпаи

  • Штепан Мюллер +