Что нового в 1.3.0 (2 июля 2021)#
Это изменения в pandas 1.3.0. См. Примечания к выпуску для полного списка изменений, включая другие версии pandas.
Предупреждение
При чтении нового Excel 2007+ (.xlsx) файлов, аргумент по умолчанию
engine=None to read_excel() теперь приведёт к использованию
openpyxl движок во всех случаях, когда опция io.excel.xlsx.reader установлено в "auto".
Ранее в некоторых случаях использовался
xlrd движок вместо. См.
Что нового 1.2.0 для получения дополнительной информации об этом изменении.
Улучшения#
Пользовательские HTTP(s)-заголовки при чтении csv или json файлов#
При чтении с удалённого URL, не обрабатываемого fsspec (например, HTTP и
HTTPS), словарь, переданный в storage_options будет использоваться для создания
заголовков, включенных в запрос. Это можно использовать для управления заголовком User-Agent
или отправки других пользовательских заголовков (GH 36688).
Например:
In [1]: headers = {"User-Agent": "pandas"}
In [2]: df = pd.read_csv(
...: "https://download.bls.gov/pub/time.series/cu/cu.item",
...: sep="\t",
...: storage_options=headers
...: )
Чтение и запись XML-документов#
Мы добавили поддержку ввода-вывода для чтения и отображения упрощенных версий XML документы с
read_xml() и DataFrame.to_xml(). Использование lxml в качестве парсера,
доступны как XPath 1.0, так и XSLT 1.0. (GH 27554)
In [1]: xml = """
...:
...:
...: square
...: 360
...: 4.0
...:
...:
...: circle
...: 360
...:
...:
...:
...: triangle
...: 180
...: 3.0
...:
...: """
In [2]: df = pd.read_xml(xml)
In [3]: df
Out[3]:
shape degrees sides
0 square 360 4.0
1 circle 360 NaN
2 triangle 180 3.0
In [4]: df.to_xml()
Out[4]:
0
square
360
4.0
1
circle
360
2
triangle
180
3.0
Для получения дополнительной информации см. Запись XML в руководстве пользователя по инструментам ввода-вывода.
Улучшения Styler#
Мы провели целенаправленную разработку Styler. См. также Документация Styler
который был пересмотрен и улучшен (GH 39720, GH 39317, GH 40493).
Метод
Styler.set_table_styles()теперь может принимать более естественный язык CSS для аргументов, такой как'color:red;'вместо[('color', 'red')](GH 39563)Методы
Styler.highlight_null(),Styler.highlight_min(), иStyler.highlight_max()теперь позволяют использовать пользовательскую CSS-подсветку вместо стандартной цветовой заливки фона (GH 40242)
Styler.apply()теперь принимает функции, которые возвращаютndarrayкогдаaxis=None, делая его теперь согласованным сaxis=0иaxis=1поведение (GH 39359)Когда некорректно отформатированный CSS передаётся через
Styler.apply()илиStyler.applymap(), теперь при рендеринге возникает ошибка (GH 39660)
Styler.format()теперь принимает аргумент ключевого словаescapeдля опционального экранирования HTML и LaTeX (GH 40388, GH 41619)
Styler.background_gradient()получил аргументgmapдля предоставления конкретной карты градиента для затенения (GH 22727)
Styler.clear()теперь очищаетStyler.hidden_indexиStyler.hidden_columnsа также (GH 40484)Добавлен метод
Styler.highlight_between()(GH 39821)Добавлен метод
Styler.highlight_quantile()(GH 40926)Добавлен метод
Styler.text_gradient()(GH 41098)Добавлен метод
Styler.set_tooltips()для включения всплывающих подсказок; это может использоваться для улучшения интерактивных отображений (GH 21266, GH 40284)Добавлен параметр
precisionв методStyler.format()для управления отображением чисел с плавающей точкой (GH 40134)
Stylerсгенерированный HTML-вывод теперь следует Руководство по стилю HTML w3 (GH 39626)Многие функции
Stylerкласс теперь либо частично, либо полностью применим к DataFrame с неуникальными индексами или столбцами (GH 41143)Более точный контроль отображения достигается через раздельное разрежение индекса или столбцов с использованием новые параметры стилизатора, которые также доступны через
option_context()(GH 41142)Добавлена опция
styler.render.max_elementsчтобы избежать перегрузки браузера при стилизации больших DataFrames (GH 40712)Добавлен метод
Styler.to_latex()(GH 21673, GH 42320), который также позволяет ограниченное преобразование CSS (GH 40731)Добавлен метод
Styler.to_html()(GH 13379)Добавлен метод
Styler.set_sticky()чтобы сделать заголовки индекса и столбцов постоянно видимыми в прокручиваемых HTML-фреймах (GH 29072)
Конструктор DataFrame учитывает copy=False с словарем#
При передаче словаря в DataFrame с copy=False,
копия больше не будет создаваться (GH 32960).
In [1]: arr = np.array([1, 2, 3])
In [2]: df = pd.DataFrame({"A": arr, "B": arr.copy()}, copy=False)
In [3]: df
Out[3]:
A B
0 1 1
1 2 2
2 3 3
df["A"] остается представлением arr:
In [4]: arr[0] = 0
In [5]: assert df.iloc[0, 0] == 0
Поведение по умолчанию при непередаче copy останется неизменным, т.е.
будет создана копия.
Тип данных строк с поддержкой PyArrow#
Мы улучшили StringDtype, тип расширения, предназначенный для строковых данных.
(GH 39908)
Теперь можно указать storage ключевой параметр для StringDtype. Используйте
параметры pandas или укажите тип данных с помощью dtype='string[pyarrow]' чтобы позволить StringArray поддерживаться массивом PyArrow вместо массива NumPy объектов Python.
StringArray на основе PyArrow требует установки pyarrow версии 1.0.0 или выше.
Предупреждение
string[pyarrow] в настоящее время считается экспериментальным. Реализация
и части API могут измениться без предупреждения.
In [6]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype(storage="pyarrow"))
Out[6]:
0 abc
1
2 def
dtype: string
Вы можете использовать псевдоним "string[pyarrow]" также.
In [7]: s = pd.Series(['abc', None, 'def'], dtype="string[pyarrow]")
In [8]: s
Out[8]:
0 abc
1
2 def
dtype: string
Вы также можете создать массив строк на основе PyArrow с помощью опций pandas.
In [9]: with pd.option_context("string_storage", "pyarrow"):
...: s = pd.Series(['abc', None, 'def'], dtype="string")
...:
In [10]: s
Out[10]:
0 abc
1
2 def
dtype: string
Обычные методы доступа к строкам работают. В соответствующих случаях тип возвращаемого значения Series или столбцов DataFrame также будет иметь строковый тип данных.
In [11]: s.str.upper()
Out[11]:
0 ABC
1
2 DEF
dtype: string
In [12]: s.str.split('b', expand=True).dtypes
Out[12]:
0 string[pyarrow]
1 string[pyarrow]
dtype: object
Методы строкового аксессора, возвращающие целые числа, будут возвращать значение с Int64Dtype
In [13]: s.str.count("a")
Out[13]:
0 1
1
2 0
dtype: Int64
Центрированные скользящие окна с датой и временем#
При выполнении скользящих вычислений на объектах DataFrame и Series с индексом, похожим на дату и время, теперь можно использовать центрированное окно, похожее на дату и время (GH 38780). Например:
In [14]: df = pd.DataFrame(
....: {"A": [0, 1, 2, 3, 4]}, index=pd.date_range("2020", periods=5, freq="1D")
....: )
....:
In [15]: df
Out[15]:
A
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
In [16]: df.rolling("2D", center=True).mean()
Out[16]:
A
2020-01-01 0.5
2020-01-02 1.5
2020-01-03 2.5
2020-01-04 3.5
2020-01-05 4.0
Другие улучшения#
DataFrame.rolling(),Series.rolling(),DataFrame.expanding(), иSeries.expanding()теперь поддерживаетmethodаргумент с'table'опция, которая выполняет оконную операцию по всемуDataFrame. См. Обзор оконных функций для производительности и функциональных преимуществ (GH 15095, GH 38995)ExponentialMovingWindowтеперь поддерживаетonlineметод, который может выполнятьmeanвычисления в онлайн-режиме. См. Обзор оконных функций (GH 41673)Добавлен
MultiIndex.dtypes()(GH 37062)Добавлен
endиend_dayпараметры дляoriginаргумент вDataFrame.resample()(GH 37804)Улучшенное сообщение об ошибке, когда
usecolsиnamesне соответствуют дляread_csv()иengine="c"(GH 29042)Улучшена согласованность сообщений об ошибках при передаче недопустимого
win_typeаргумент в Методы окна (GH 15969)read_sql_query()теперь принимаетdtypeаргумент для преобразования столбцовых данных из базы данных SQL на основе пользовательского ввода (GH 10285)read_csv()теперь вызываетParserWarningесли длина заголовка или заданных имен не соответствует длине данных, когдаusecolsне указан (GH 21768)Улучшено сопоставление целочисленных типов из pandas в SQLAlchemy при использовании
DataFrame.to_sql()(GH 35076)to_numeric()теперь поддерживает понижающее преобразование nullableExtensionDtypeобъекты (GH 33013)Добавлена поддержка dict-подобных имен в
MultiIndex.set_namesиMultiIndex.rename(GH 20421)read_excel()теперь может автоматически определять файлы .xlsb и старые файлы .xls (GH 35416, GH 41225)ExcelWriterтеперь принимаетif_sheet_existsпараметр для управления поведением режима добавления при записи в существующие листы (GH 40230)Rolling.sum(),Expanding.sum(),Rolling.mean(),Expanding.mean(),ExponentialMovingWindow.mean(),Rolling.median(),Expanding.median(),Rolling.max(),Expanding.max(),Rolling.min(), иExpanding.min()теперь поддерживает Numba выполнение с помощьюengineключевое слово (GH 38895, GH 41267)DataFrame.apply()теперь может принимать унарные операторы NumPy в виде строк, напримерdf.apply("sqrt"), что уже было дляSeries.apply()(GH 39116)DataFrame.apply()теперь может принимать невызываемые свойства DataFrame в виде строк, напримерdf.apply("size"), что уже было дляSeries.apply()(GH 39116)DataFrame.applymap()теперь может принимать kwargs для передачи пользовательскомуfunc(GH 39987)Передача
DataFrameиндексатор дляilocтеперь запрещено дляSeries.__getitem__()иDataFrame.__getitem__()(GH 39004)Series.apply()теперь может принимать аргументы, похожие на списки или словари, но не являющиеся списками или словарями, напримерser.apply(np.array(["sum", "mean"])), что уже было дляDataFrame.apply()(GH 39140)DataFrame.plot.scatter()теперь может принимать категориальный столбец для аргументаc(GH 12380, GH 31357)Series.loc()теперь вызывает полезное сообщение об ошибке, когда Series имеетMultiIndexи индексатор имеет слишком много измерений (GH 35349)read_stata()теперь поддерживает чтение данных из сжатых файлов (GH 26599)Добавлена поддержка парсинга
ISO 8601-подобные временные метки с отрицательными знаками вTimedelta(GH 37172)Добавлена поддержка унарных операторов в
FloatingArray(GH 38749)RangeIndexтеперь может быть создан путём передачиrangeобъект напрямую, например,pd.RangeIndex(range(3))(GH 12067)Series.round()иDataFrame.round()теперь работают с обнуляемыми целочисленными и плавающими типами данных (GH 38844)read_csv()иread_json()предоставить аргументencoding_errorsдля управления обработкой ошибок кодирования (GH 39450)DataFrameGroupBy.any(),SeriesGroupBy.any(),DataFrameGroupBy.all(), иSeriesGroupBy.all()использовать логику Клини с нуллифицируемыми типами данных (GH 37506)DataFrameGroupBy.any(),SeriesGroupBy.any(),DataFrameGroupBy.all(), иSeriesGroupBy.all()возвращаетBooleanDtypeдля столбцов с обнуляемыми типами данных (GH 33449)DataFrameGroupBy.any(),SeriesGroupBy.any(),DataFrameGroupBy.all(), иSeriesGroupBy.all()вызов исключения сobjectданные, содержащиеpd.NAдаже когдаskipna=True(GH 37501)DataFrameGroupBy.rank()иSeriesGroupBy.rank()теперь поддерживает данные типа object-dtype (GH 38278)Создание
DataFrameилиSeriesсdataаргумент является итерируемым объектом Python, который не NumPyndarrayсостоящий из скаляров NumPy теперь приведёт к dtype с точностью, равной максимальной из скаляров NumPy; это уже было так, когдаdataявляется NumPyndarray(GH 40908)Добавить ключевое слово
sorttopivot_table()чтобы разрешить несортировку результата (GH 39143)Добавить ключевое слово
dropnatoDataFrame.value_counts()чтобы позволить подсчет строк, включающихNAзначения (GH 41325)Series.replace()теперь будет приводить результаты кPeriodDtypeгде возможно, вместоobjectтип данных (GH 41526)Улучшенное сообщение об ошибке в
corrиcovметоды наRolling,Expanding, иExponentialMovingWindowкогдаotherне являетсяDataFrameилиSeries(GH 41741)Series.between()теперь может приниматьleftилиrightв качестве аргументов дляinclusiveчтобы включить только левую или правую границу (GH 40245)DataFrame.explode()теперь поддерживает взрыв нескольких столбцов. Егоcolumnаргумент теперь также принимает список str или кортежей для одновременного разворачивания нескольких столбцов (GH 39240)DataFrame.sample()теперь принимаетignore_indexаргумент для сброса индекса после выборки, аналогичноDataFrame.drop_duplicates()иDataFrame.sort_values()(GH 38581)
Значительные исправления ошибок#
Это исправления ошибок, которые могут привести к заметным изменениям в поведении.
Categorical.unique теперь всегда сохраняет тот же dtype, что и исходный#
Ранее, при вызове Categorical.unique() с категориальными данными, неиспользуемые категории в новом массиве будут удалены, что делает dtype нового массива отличным от исходного (GH 18291)
В качестве примера, учитывая:
In [17]: dtype = pd.CategoricalDtype(['bad', 'neutral', 'good'], ordered=True)
In [18]: cat = pd.Categorical(['good', 'good', 'bad', 'bad'], dtype=dtype)
In [19]: original = pd.Series(cat)
In [20]: unique = original.unique()
Предыдущее поведение:
In [1]: unique
['good', 'bad']
Categories (2, object): ['bad' < 'good']
In [2]: original.dtype == unique.dtype
False
Новое поведение:
In [21]: unique
Out[21]:
['good', 'bad']
Categories (3, object): ['bad' < 'neutral' < 'good']
In [22]: original.dtype == unique.dtype
Out[22]: True
Сохранение типов данных в DataFrame.combine_first()#
DataFrame.combine_first() теперь будет сохранять типы данных (GH 7509)
In [23]: df1 = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=[0, 1, 2])
In [24]: df1
Out[24]:
A B
0 1 1
1 2 2
2 3 3
In [25]: df2 = pd.DataFrame({"B": [4, 5, 6], "C": [1, 2, 3]}, index=[2, 3, 4])
In [26]: df2
Out[26]:
B C
2 4 1
3 5 2
4 6 3
In [27]: combined = df1.combine_first(df2)
Предыдущее поведение:
In [1]: combined.dtypes
Out[2]:
A float64
B float64
C float64
dtype: object
Новое поведение:
In [28]: combined.dtypes
Out[28]:
A float64
B int64
C float64
dtype: object
Методы группировки agg и transform больше не изменяют тип возвращаемых данных для вызываемых объектов#
Ранее методы DataFrameGroupBy.aggregate(),
SeriesGroupBy.aggregate(), DataFrameGroupBy.transform(), и
SeriesGroupBy.transform() может привести к изменению типа данных результата, когда аргумент func
является вызываемым, что может привести к нежелательным результатам (GH 21240). Приведение будет происходить, если результат числовой и приведение обратно к исходному типу данных не изменяет никакие значения, измеренные с помощью np.allclose. Теперь такое приведение не происходит.
In [29]: df = pd.DataFrame({'key': [1, 1], 'a': [True, False], 'b': [True, True]})
In [30]: df
Out[30]:
key a b
0 1 True True
1 1 False True
Предыдущее поведение:
In [5]: df.groupby('key').agg(lambda x: x.sum())
Out[5]:
a b
key
1 True 2
Новое поведение:
In [31]: df.groupby('key').agg(lambda x: x.sum())
Out[31]:
a b
key
1 1 2
float результат для DataFrameGroupBy.mean(), DataFrameGroupBy.median(), и GDataFrameGroupBy.var(), SeriesGroupBy.mean(), SeriesGroupBy.median(), и SeriesGroupBy.var()#
Ранее эти методы могли приводить к разным типам данных в зависимости от входных значений. Теперь эти методы всегда будут возвращать тип данных float. (GH 41137)
In [32]: df = pd.DataFrame({'a': [True], 'b': [1], 'c': [1.0]})
Предыдущее поведение:
In [5]: df.groupby(df.index).mean()
Out[5]:
a b c
0 True 1 1.0
Новое поведение:
In [33]: df.groupby(df.index).mean()
Out[33]:
a b c
0 1.0 1.0 1.0
Попробовать выполнить операцию на месте при установке значений с loc и iloc#
При установке всего столбца с помощью loc или iloc, pandas попытается вставить значения в существующие данные, а не создавать полностью новый массив.
In [34]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [35]: values = df.values
In [36]: new = np.array([5, 6, 7], dtype="int64")
In [37]: df.loc[[0, 1, 2], "A"] = new
Как в новом, так и в старом поведении данные в values перезаписывается, но в старом поведении тип данных df["A"] изменено на int64.
Предыдущее поведение:
In [1]: df.dtypes
Out[1]:
A int64
dtype: object
In [2]: np.shares_memory(df["A"].values, new)
Out[2]: False
In [3]: np.shares_memory(df["A"].values, values)
Out[3]: False
В pandas 1.3.0, df продолжает делиться данными с values
Новое поведение:
In [38]: df.dtypes
Out[38]:
A float64
dtype: object
In [39]: np.shares_memory(df["A"], new)
Out[39]: False
In [40]: np.shares_memory(df["A"], values)
Out[40]: True
Никогда не выполняйте операцию на месте при установке frame[keys] = values#
При установке нескольких столбцов с помощью frame[keys] = values новые массивы
заменят существующие массивы для этих ключей, что не будет перезаписан
(GH 39510). В результате столбцы сохранят тип(ы) данных values,
никогда не приводя к типам данных существующих массивов.
In [41]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")
In [42]: df[["A"]] = 5
В старом поведении, 5 был приведен к float64 и вставлены в существующий массив, лежащий в основе df:
Предыдущее поведение:
In [1]: df.dtypes
Out[1]:
A float64
В новом поведении мы получаем новый массив и сохраняем целочисленный тип данных 5:
Новое поведение:
In [43]: df.dtypes
Out[43]:
A int64
dtype: object
Согласованное приведение типов при установке в Boolean Series#
Установка небулевых значений в Series с dtype=bool теперь последовательно
приводит к dtype=object (GH 38709)
In [1]: orig = pd.Series([True, False])
In [2]: ser = orig.copy()
In [3]: ser.iloc[1] = np.nan
In [4]: ser2 = orig.copy()
In [5]: ser2.iloc[1] = 2.0
Предыдущее поведение:
In [1]: ser
Out [1]:
0 1.0
1 NaN
dtype: float64
In [2]:ser2
Out [2]:
0 True
1 2.0
dtype: object
Новое поведение:
In [1]: ser
Out [1]:
0 True
1 NaN
dtype: object
In [2]:ser2
Out [2]:
0 True
1 2.0
dtype: object
DataFrameGroupBy.rolling и SeriesGroupBy.rolling больше не возвращают сгруппированный столбец в значениях#
Столбец группировки теперь будет удален из результата
groupby.rolling операция (GH 32262)
In [44]: df = pd.DataFrame({"A": [1, 1, 2, 3], "B": [0, 1, 2, 3]})
In [45]: df
Out[45]:
A B
0 1 0
1 1 1
2 2 2
3 3 3
Предыдущее поведение:
In [1]: df.groupby("A").rolling(2).sum()
Out[1]:
A B
A
1 0 NaN NaN
1 2.0 1.0
2 2 NaN NaN
3 3 NaN NaN
Новое поведение:
In [46]: df.groupby("A").rolling(2).sum()
Out[46]:
B
A
1 0 NaN
1 1.0
2 2 NaN
3 3 NaN
Удалено искусственное усечение в скользящей дисперсии и стандартном отклонении#
Rolling.std() и Rolling.var() больше не будет искусственно обрезать результаты, которые меньше ~1e-8 и ~1e-15 соответственно до
нуля (GH 37051, GH 40448, GH 39872).
Однако теперь в результатах могут присутствовать артефакты с плавающей точкой при прокатке больших значений.
In [47]: s = pd.Series([7, 5, 5, 5])
In [48]: s.rolling(3).var()
Out[48]:
0 NaN
1 NaN
2 1.333333
3 0.000000
dtype: float64
DataFrameGroupBy.rolling и SeriesGroupBy.rolling с MultiIndex больше не удаляют уровни в результате#
DataFrameGroupBy.rolling() и SeriesGroupBy.rolling() больше не будет удалять уровни DataFrame
с MultiIndex в результате. Это может привести к воспринимаемому дублированию уровней в результирующем
MultiIndex, но это изменение восстанавливает поведение, которое присутствовало в версии 1.1.3 (GH 38787, GH 38523).
In [49]: index = pd.MultiIndex.from_tuples([('idx1', 'idx2')], names=['label1', 'label2'])
In [50]: df = pd.DataFrame({'a': [1], 'b': [2]}, index=index)
In [51]: df
Out[51]:
a b
label1 label2
idx1 idx2 1 2
Предыдущее поведение:
In [1]: df.groupby('label1').rolling(1).sum()
Out[1]:
a b
label1
idx1 1.0 2.0
Новое поведение:
In [52]: df.groupby('label1').rolling(1).sum()
Out[52]:
a b
label1 label1 label2
idx1 idx1 idx2 1.0 2.0
Обратно несовместимые изменения API#
Повышенные минимальные версии для зависимостей#
Некоторые минимальные поддерживаемые версии зависимостей были обновлены. Если установлены, теперь требуются:
Пакет |
Минимальная версия |
Обязательно |
Изменено |
|---|---|---|---|
numpy |
1.17.3 |
X |
X |
pytz |
2017.3 |
X |
|
python-dateutil |
2.7.3 |
X |
|
bottleneck |
1.2.1 |
||
numexpr |
2.7.0 |
X |
|
pytest (разработка) |
6.0 |
X |
|
mypy (dev) |
0.812 |
X |
|
setuptools |
38.6.0 |
X |
Для дополнительные библиотеки общая рекомендация — использовать последнюю версию. Следующая таблица перечисляет минимальную версию для каждой библиотеки, которая в настоящее время тестируется в ходе разработки pandas. Опциональные библиотеки ниже минимальной тестируемой версии могут всё ещё работать, но не считаются поддерживаемыми.
Пакет |
Минимальная версия |
Изменено |
|---|---|---|
beautifulsoup4 |
4.6.0 |
|
fastparquet |
0.4.0 |
X |
fsspec |
0.7.4 |
|
gcsfs |
0.6.0 |
|
lxml |
4.3.0 |
|
matplotlib |
2.2.3 |
|
numba |
0.46.0 |
|
openpyxl |
3.0.0 |
X |
pyarrow |
0.17.0 |
X |
pymysql |
0.8.1 |
X |
pytables |
3.5.1 |
|
s3fs |
0.4.0 |
|
scipy |
1.2.0 |
|
sqlalchemy |
1.3.0 |
X |
tabulate |
0.8.7 |
X |
xarray |
0.12.0 |
|
xlrd |
1.2.0 |
|
xlsxwriter |
1.0.2 |
|
xlwt |
1.3.0 |
|
pandas-gbq |
0.12.0 |
См. Зависимости и Необязательные зависимости подробнее.
Другие изменения API#
Частично инициализированный
CategoricalDtypeобъектов (т.е. тех, которые имеютcategories=None) больше не будет сравниваться как равный полностью инициализированным объектам dtype (GH 38516)Доступ к
_constructor_expanddimнаDataFrameи_constructor_slicedнаSeriesтеперь вызываетAttributeError. РанееNotImplementedErrorбыл поднят (GH 38782)Добавлен новый
engineи**engine_kwargsпараметры дляDataFrame.to_sql()для поддержки других будущих "SQL-движков". В настоящее время мы по-прежнему используем толькоSQLAlchemyвнутренне, но планируется поддержка дополнительных механизмов, таких как turbodbc (GH 36893)Удалено избыточное
freqизPeriodIndexстроковое представление (GH 41653)ExtensionDtype.construct_array_type()теперь является обязательным методом вместо необязательного дляExtensionDtypeподклассы (GH 24860)Вызов
hashна нехешируемых объектах pandas теперь будет вызыватьсяTypeErrorсо встроенным сообщением об ошибке (например,unhashable type: 'Series'). Ранее вызывалось пользовательское сообщение, например'Series' objects are mutable, thus they cannot be hashed. Кроме того,isinstance(теперь вернет, abc.collections.Hashable)False(GH 40013)Styler.from_custom_template()теперь имеет два новых аргумента для имен шаблонов и удалил старыйname, из-за введения наследования шаблонов для лучшего парсинга (GH 42053). Также требуются модификации подклассов для атрибутов Styler.
Сборка#
Документация в
.pptxи.pdfформаты больше не включены в wheels или исходные дистрибутивы. (GH 30741)
Устаревшие функции#
Устаревшее удаление нежелательных столбцов в редукциях DataFrame и операциях DataFrameGroupBy#
Вызов редукции (например, .min, .max, .sum) на DataFrame с
numeric_only=None (по умолчанию), столбцы, где редукция вызывает TypeError
тихо игнорируются и удаляются из результата.
Это поведение устарело. В будущей версии TypeError будет вызвано,
и пользователям потребуется выбрать только допустимые столбцы перед вызовом функции.
Например:
In [53]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [54]: df
Out[54]:
A B
0 1 2016-01-01
1 2 2016-01-02
2 3 2016-01-03
3 4 2016-01-04
Старое поведение:
In [3]: df.prod()
Out[3]:
Out[3]:
A 24
dtype: int64
Будущее поведение:
In [4]: df.prod()
...
TypeError: 'DatetimeArray' does not implement reduction 'prod'
In [5]: df[["A"]].prod()
Out[5]:
A 24
dtype: int64
Аналогично, при применении функции к DataFrameGroupBy, столбцы, на которых
функция вызывает исключение TypeError в настоящее время молча игнорируются и удаляются
из результата.
Это поведение устарело. В будущей версии TypeError
будет вызвано, и пользователям нужно будет выбрать только допустимые столбцы перед вызовом
функции.
Например:
In [55]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})
In [56]: gb = df.groupby([1, 1, 2, 2])
Старое поведение:
In [4]: gb.prod(numeric_only=False)
Out[4]:
A
1 2
2 12
Будущее поведение:
In [5]: gb.prod(numeric_only=False)
...
TypeError: datetime64 type does not support prod operations
In [6]: gb[["A"]].prod(numeric_only=False)
Out[6]:
A
1 2
2 12
Другие устаревшие функции#
Устарело: разрешение передачи скаляров в
Categoricalконструктор (GH 38433)Устаревшее построение
CategoricalIndexбез передачи list-like данных (GH 38944)Устарело разрешение аргументов ключевых слов, специфичных для подкласса, в
Indexконструктор, используйте конкретный подкласс напрямую вместо этого (GH 14093, GH 21311, GH 22315, GH 26974)Устарел
astype()метод даты-времени (timedelta64[ns],datetime64[ns],Datetime64TZDtype,PeriodDtype) для преобразования в целочисленные типы данных, используйтеvalues.view(...)вместо (GH 38544). Это устаревание было позже отменено в pandas 1.4.0.Устаревший
MultiIndex.is_lexsorted()иMultiIndex.lexsort_depth(), используйтеMultiIndex.is_monotonic_increasing()вместо (GH 32259)Устаревшее ключевое слово
try_castвSeries.where(),Series.mask(),DataFrame.where(),DataFrame.mask(); при необходимости преобразуйте результаты вручную (GH 38836)Устаревшее сравнение
Timestampобъекты сdatetime.dateобъекты. Вместо, например,ts <= mydateиспользоватьts <= pd.Timestamp(mydate)илиts.date() <= mydate(GH 36131)Устаревший
Rolling.win_typeвозвращая"freq"(GH 38963)Устаревший
Rolling.is_datetimelike(GH 38963)Устаревший
DataFrameиндексатор дляSeries.__setitem__()иDataFrame.__setitem__()(GH 39004)Устаревший
ExponentialMovingWindow.vol()(GH 39220)Используя
.astypeдля преобразования междуdatetime64[ns]dtype иDatetimeTZDtypeустарело и будет вызывать ошибку в будущей версии, используйтеobj.tz_localizeилиobj.dt.tz_localizeвместо (GH 38622)Устаревшее приведение типов
datetime.dateобъекты вdatetime64при использовании в качествеfill_valueвDataFrame.unstack(),DataFrame.shift(),Series.shift(), иDataFrame.reindex(), передатьpd.Timestamp(dateobj)вместо (GH 39767)Устаревший
Styler.set_na_rep()иStyler.set_precision()в пользуStyler.format()сna_repиprecisionкак существующие и новые входные аргументы соответственно (GH 40134, GH 40425)Устаревший
Styler.where()в пользу использования альтернативной формулировки сStyler.applymap()(GH 40821)Устаревшее разрешение частичного сбоя в
Series.transform()иDataFrame.transform()когдаfuncявляется списком или словарём и вызывает что-либо, кромеTypeError;funcвызывая что-либо, кромеTypeErrorвызовет в будущей версии (GH 40211)Устаревшие аргументы
error_bad_linesиwarn_bad_linesвread_csv()иread_table()в пользу аргументаon_bad_lines(GH 15122)Устаревшая поддержка для
np.ma.mrecords.MaskedRecordsвDataFrameконструктор, передайте{name: data[name] for name in data.dtype.names}вместо (GH 40363)Устаревшее использование
merge(),DataFrame.merge(), иDataFrame.join()на разном количестве уровней (GH 34862)Устаревшее использование
**kwargsвExcelWriter; используйте аргумент ключевого словаengine_kwargsвместо (GH 40430)Устарел
levelключевое слово дляDataFrameиSeriesагрегации; используйте groupby вместо (GH 39983)Устарел
inplaceпараметрCategorical.remove_categories(),Categorical.add_categories(),Categorical.reorder_categories(),Categorical.rename_categories(),Categorical.set_categories()и будет удалена в будущей версии (GH 37643)Устаревший
merge()создание дублирующихся столбцов черезsuffixesключевое слово и уже существующие столбцы (GH 22818)Устаревшая настройка
Categorical._codes, создайте новыйCategoricalс желаемыми кодами вместо (GH 40606)Устарел
convert_floatнеобязательным аргументом вread_excel()иExcelFile.parse()(GH 41127)Устаревшее поведение
DatetimeIndex.union()со смешанными часовыми поясами; в будущей версии оба будут приведены к UTC вместо типа object (GH 39328)Устаревшее использование
usecolsс индексами вне диапазона дляread_csv()сengine="c"(GH 25623)Устаревшая специальная обработка списков с первым элементом Categorical в
DataFrameконструктор; передать какpd.DataFrame({col: categorical, ...})вместо (GH 38845)Устаревшее поведение
DataFrameконструктор, когдаdtypeпередается, и данные не могут быть приведены к этому типу данных. В будущей версии это будет вызывать исключение вместо молчаливого игнорирования (GH 24435)Устарел
Timestamp.freqатрибут. Для свойств, которые его используют (is_month_start,is_month_end,is_quarter_start,is_quarter_end,is_year_start,is_year_end), когда у вас естьfreq, используйте, например,freq.is_month_start(ts)(GH 15146)Устаревшее создание
SeriesилиDataFrameсDatetimeTZDtypeданные иdatetime64[ns]dtype. ИспользуйтеSeries(data).dt.tz_localize(None)вместо (GH 41555, GH 33401)Устаревшее поведение
Seriesконструкция с большими целочисленными значениями и малым целочисленным типом данных, тихо переполняющаяся; используйтеSeries(data).astype(dtype)вместо (GH 41734)Устаревшее поведение
DataFrameсоздание с плавающими данными и приведением целочисленного типа, даже если с потерями; в будущей версии это останется плавающим, соответствуяSeriesповедение (GH 41770)Устаревший вывод
timedelta64[ns],datetime64[ns], илиDatetimeTZDtypeтипы данных вSeriesсоздание при передаче данных, содержащих строки, и отсутствииdtypeпередается (GH 33558)В будущей версии создание
SeriesилиDataFrameсdatetime64[ns]данные иDatetimeTZDtypeбудет обрабатывать данные как локальное время вместо времени UTC (соответствуя поведению DatetimeIndex). Чтобы обрабатывать данные как время UTC, используйтеpd.Series(data).dt.tz_localize("UTC").dt.tz_convert(dtype.tz)илиpd.Series(data.view("int64"), dtype=dtype)(GH 33401)Устаревшая передача списков как
keytoDataFrame.xs()иSeries.xs()(GH 41760)Устаревшие булевы аргументы функции
inclusiveвSeries.between()чтобы иметь{"left", "right", "neither", "both"}как стандартные значения аргументов (GH 40628)Устаревшая передача аргументов как позиционных для всех следующих, с отмеченными исключениями (GH 41485):
concat()(кромеobjs)read_csv()(кромеfilepath_or_buffer)read_table()(кромеfilepath_or_buffer)DataFrame.clip()иSeries.clip()(кромеupperиlower)DataFrame.drop_duplicates()(кромеsubset),Series.drop_duplicates(),Index.drop_duplicates()иMultiIndex.drop_duplicates()DataFrame.drop()(кромеlabels) иSeries.drop()DataFrame.ffill(),Series.ffill(),DataFrame.bfill(), иSeries.bfill()DataFrame.fillna()иSeries.fillna()(кромеvalue)DataFrame.interpolate()иSeries.interpolate()(кромеmethod)DataFrame.mask()иSeries.mask()(кромеcondиother)DataFrame.reset_index()(кромеlevel) иSeries.reset_index()DataFrame.set_axis()иSeries.set_axis()(кромеlabels)DataFrame.set_index()(кромеkeys)DataFrame.sort_values()(кромеby) иSeries.sort_values()DataFrame.where()иSeries.where()(кромеcondиother)Index.set_names()иMultiIndex.set_names()(кромеnames)MultiIndex.codes()(кромеcodes)MultiIndex.set_levels()(кромеlevels)Resampler.interpolate()(кромеmethod)
Улучшения производительности#
Улучшение производительности в
IntervalIndex.isin()(GH 38353)Улучшение производительности в
Series.mean()для nullable типов данных (GH 34814)Улучшение производительности в
Series.isin()для nullable типов данных (GH 38340)Улучшение производительности в
DataFrame.fillna()сmethod="pad"илиmethod="backfill"для допускающих значения NULL типов с плавающей запятой и целочисленных типов (GH 39953)Улучшение производительности в
DataFrame.corr()дляmethod=kendall(GH 28329)Улучшение производительности в
DataFrame.corr()дляmethod=spearman(GH 40956, GH 41885)Улучшение производительности в
Rolling.corr()иRolling.cov()(GH 39388)Улучшение производительности в
RollingGroupby.corr(),ExpandingGroupby.corr(),ExpandingGroupby.corr()иExpandingGroupby.cov()(GH 39591)Улучшение производительности в
unique()для типа данных object (GH 37615)Улучшение производительности в
json_normalize()для базовых случаев (включая разделители) (GH 40035 GH 15621)Улучшение производительности в
ExpandingGroupbyметоды агрегации (GH 39664)Улучшение производительности в
Stylerгде время рендеринга сокращено более чем на 50% и теперь соответствуетDataFrame.to_html()(GH 39972 GH 39952, GH 40425)Метод
Styler.set_td_classes()теперь так же производителен, какStyler.apply()иStyler.applymap(), и даже больше в некоторых случаях (GH 40453)Улучшение производительности в
ExponentialMovingWindow.mean()сtimes(GH 39784)Улучшение производительности в
DataFrameGroupBy.apply()иSeriesGroupBy.apply()при необходимости использования резервной реализации на Python (GH 40176)Улучшение производительности при преобразовании массива PyArrow Boolean в nullable Boolean массив pandas (GH 41051)
Улучшение производительности для конкатенации данных с типом
CategoricalDtype(GH 40193)Улучшение производительности в
DataFrameGroupBy.cummin(),SeriesGroupBy.cummin(),DataFrameGroupBy.cummax(), иSeriesGroupBy.cummax()с допускающими значение NULL типами данных (GH 37493)Улучшение производительности в
Series.nunique()с значениями nan (GH 40865)Улучшение производительности в
DataFrame.transpose(),Series.unstack()сDatetimeTZDtype(GH 40149)Улучшение производительности в
Series.plot()иDataFrame.plot()с ленивой загрузкой точки входа (GH 41492)
Исправления ошибок#
Категориальный#
Ошибка в
CategoricalIndexнеправильно не вызывает исключениеTypeErrorкогда передаются скалярные данные (GH 38614)Ошибка в
CategoricalIndex.reindexне удалось, когдаIndexпереданный не был категориальным, но все его значения были метками в категории (GH 28690)Ошибка, при которой создание
Categoricalиз массива типа object-dtypedateобъекты не корректно сохранялись при сериализации сastype(GH 38552)Ошибка при построении
DataFrameизndarrayиCategoricalDtype(GH 38857)Ошибка при установке категориальных значений в столбец с типом object-dtype в
DataFrame(GH 39136)Ошибка в
DataFrame.reindex()вызывалIndexErrorкогда новый индекс содержал дубликаты, а старый индекс былCategoricalIndex(GH 38906)Ошибка в
Categorical.fillna()с категорией, похожей на кортеж, вызывающейNotImplementedErrorвместоValueErrorпри заполнении некатегориальным кортежем (GH 41914)
Datetimelike#
Ошибка в
DataFrameиSeriesконструкторы иногда отбрасывали наносекунды изTimestamp(соответственно.Timedelta)data, сdtype=datetime64[ns](соответственно.timedelta64[ns]) (GH 38032)Ошибка в
DataFrame.first()иSeries.first()со смещением на один месяц, возвращающий некорректный результат, когда первый день является последним днём месяца (GH 29623)Ошибка при построении
DataFrameилиSeriesс несоответствующимиdatetime64данные иtimedelta64dtype, или наоборот, не вызывая исключениеTypeError(GH 38575, GH 38764, GH 38792)Ошибка при построении
SeriesилиDataFrameсdatetimeобъект вне границ дляdatetime64[ns]тип данных илиtimedeltaобъект вне границ дляtimedelta64[ns]тип данных (GH 38792, GH 38965)Ошибка в
DatetimeIndex.intersection(),DatetimeIndex.symmetric_difference(),PeriodIndex.intersection(),PeriodIndex.symmetric_difference()всегда возвращает object-dtype при работе сCategoricalIndex(GH 38741)Ошибка в
DatetimeIndex.intersection()выдавая некорректные результаты с частотами, не являющимися Tick, приn != 1(GH 42104)Ошибка в
Series.where()некорректное приведение типовdatetime64значения вint64(GH 37682)Ошибка в
Categoricalнеправильное приведение типовdatetimeобъект вTimestamp(GH 38878)Ошибка в сравнениях между
Timestampобъект иdatetime64объекты чуть за пределами границ реализации для наносекундdatetime64(GH 39221)Ошибка в
Timestamp.round(),Timestamp.floor(),Timestamp.ceil()для значений, близких к границам реализацииTimestamp(GH 39244)Ошибка в
Timedelta.round(),Timedelta.floor(),Timedelta.ceil()для значений, близких к границам реализацииTimedelta(GH 38964)Ошибка в
date_range()неправильное созданиеDatetimeIndexсодержащийNaTвместо вызова исключенияOutOfBoundsDatetimeв крайних случаях (GH 24124)Ошибка в
infer_freq()неправильно не определяет частоту 'H' дляDatetimeIndexесли последний имеет часовой пояс и пересекает границы перехода на летнее время (GH 39556)Ошибка в
SeriesподдерживаемыйDatetimeArrayилиTimedeltaArrayиногда не удается установить массивfreqtoNone(GH 41425)
Timedelta#
Ошибка при построении
Timedeltaизnp.timedelta64объектов с не-наносекундными единицами, которые выходят за пределы допустимых дляtimedelta64[ns](GH 38965)Ошибка при построении
TimedeltaIndexнекорректно принимаяnp.datetime64("NaT")объекты (GH 39462)Ошибка при построении
Timedeltaиз входной строки только с символами и без цифр не удалось вызвать ошибку (GH 39710)Ошибка в
TimedeltaIndexиto_timedelta()не удалось вызвать при передаче не-наносекундныхtimedelta64массивы, которые переполняются при преобразовании вtimedelta64[ns](GH 40008)
Часовые пояса#
Числовой#
Ошибка в
DataFrame.quantile(),DataFrame.sort_values()вызывая некорректное последующее поведение индексирования (GH 38351)Ошибка в
DataFrame.sort_values()вызовIndexErrorдля пустыхby(GH 40258)Ошибка в
DataFrame.select_dtypes()сinclude=np.numberбудет удалять числовыеExtensionDtypeстолбцы (GH 35340)Ошибка в
DataFrame.mode()иSeries.mode()не сохраняя целочисленную согласованностьIndexдля пустого ввода (GH 33321)Ошибка в
DataFrame.rank()когда DataFrame содержалnp.inf(GH 32593)Ошибка в
DataFrame.rank()сaxis=0и столбцы, содержащие несравнимые типы, вызывающиеIndexError(GH 38932)Ошибка в
Series.rank(),DataFrame.rank(),DataFrameGroupBy.rank(), иSeriesGroupBy.rank()обработка наиболее отрицательногоint64значение как отсутствующее (GH 32859)Ошибка в
DataFrame.select_dtypes()различное поведение между Windows и Linux сinclude="int"(GH 36596)Ошибка в
DataFrame.apply()иDataFrame.agg()при передаче аргументаfunc="size"будет работать со всемDataFrameвместо строк или столбцов (GH 39934)Ошибка в
DataFrame.transform()вызоветSpecificationErrorпри передаче словаря и отсутствии столбцов; теперь будет вызыватьсяKeyErrorвместо (GH 40004)Ошибка в
DataFrameGroupBy.rank()иSeriesGroupBy.rank()давая некорректные результаты сpct=Trueи равные значения между последовательными группами (GH 40518)Ошибка в
Series.count()приводило бы кint32результат на 32-битных платформах при аргументеlevel=None(GH 40908)Ошибка в
SeriesиDataFrameагрегации с методамиanyиallне возвращает булевы результаты для данных типа object (GH 12863, GH 35450, GH 27709)Ошибка в
Series.clip()завершится ошибкой, если Series содержит значения NA и имеет nullable int или float в качестве типа данных (GH 40851)Ошибка в
UInt64Index.where()иUInt64Index.putmask()сnp.int64dtypeotherнекорректное возбуждениеTypeError(GH 41974)Ошибка в
DataFrame.agg()не сортируя агрегированную ось в порядке предоставленных агрегационных функций, когда одна или несколько агрегационных функций не дают результатов (GH 33634)Ошибка в
DataFrame.clip()не интерпретируя пропущенные значения как отсутствие порога (GH 40420)
Преобразование#
Ошибка в
Series.to_dict()сorient='records'теперь возвращает нативные типы Python (GH 25969)Ошибка в
Series.view()иIndex.view()при преобразовании между дата-время подобными (datetime64[ns],datetime64[ns, tz],timedelta64,period) dtypes (GH 39788)Ошибка при создании
DataFrameиз пустогоnp.recarrayне сохраняя исходные типы данных (GH 40121)Ошибка в
DataFrameне удалось вызватьTypeErrorпри создании изfrozenset(GH 40163)Ошибка в
Indexконструкция молча игнорирует переданныйdtypeкогда данные не могут быть приведены к этому типу (GH 21311)Ошибка в
StringArray.astype()возврат к NumPy и вызов исключения при преобразовании вdtype='categorical'(GH 40450)Ошибка в
factorize()где, при задании массива с числовым типом данных NumPy ниже int64, uint64 и float64, уникальные значения не сохраняли свой исходный тип данных (GH 41132)Ошибка в
DataFrameсоздание с помощью словаря, содержащего массивоподобный объект сExtensionDtypeиcopy=Trueне удалось создать копию (GH 38939)Ошибка в
qcut()вызов ошибки при взятииFloat64DTypeв качестве входных данных (GH 40730)Ошибка в
DataFrameиSeriesсоздание сdatetime64[ns]данные иdtype=objectв результатеdatetimeобъекты вместоTimestampобъекты (GH 41599)Ошибка в
DataFrameиSeriesсоздание сtimedelta64[ns]данные иdtype=objectв результатеnp.timedelta64объекты вместоTimedeltaобъекты (GH 41599)Ошибка в
DataFrameсоздание при передаче двумерного объекта object-dtypenp.ndarrayofPeriodилиIntervalобъекты, не приводящиеся кPeriodDtypeилиIntervalDtype, соответственно (GH 41812)Ошибка при построении
Seriesиз списка иPandasDtype(GH 39357)Ошибка при создании
Seriesизrangeобъект, который не помещается в границыint64тип данных (GH 30173)Ошибка при создании
Seriesизdictсо всеми ключами-кортежами иIndexчто требует переиндексации (GH 41707)Ошибка в
infer_dtype()не распознаёт Series, Index или массив с типом данных Period (GH 23553)Ошибка в
infer_dtype()вызов ошибки для общегоExtensionArrayобъектов. Теперь будет возвращать"unknown-array"вместо вызова исключения (GH 37367)Ошибка в
DataFrame.convert_dtypes()неправильно вызывалValueErrorпри вызове на пустом DataFrame (GH 40393)
Строки#
Ошибка в преобразовании из
pyarrow.ChunkedArraytoStringArrayкогда исходный имел нулевые блоки (GH 41040)Ошибка в
Series.replace()иDataFrame.replace()игнорируя замены сregex=TrueдляStringDTypeданные (GH 41333, GH 35977)Ошибка в
Series.str.extract()сStringArrayвозвращающий object dtype для пустогоDataFrame(GH 41441)Ошибка в
Series.str.replace()гдеcaseаргумент игнорировался, когдаregex=False(GH 41602)
Interval#
Ошибка в
IntervalIndex.intersection()иIntervalIndex.symmetric_difference()всегда возвращает object-dtype при работе сCategoricalIndex(GH 38653, GH 38741)Ошибка в
IntervalIndex.intersection()возвращение дубликатов, когда хотя бы один изIndexобъекты имеют дубликаты, которые присутствуют в другом (GH 38743)IntervalIndex.union(),IntervalIndex.intersection(),IntervalIndex.difference(), иIntervalIndex.symmetric_difference()теперь приводится к соответствующему типу данных вместо вызоваTypeErrorпри работе с другимIntervalIndexс несовместимым dtype (GH 39267)PeriodIndex.union(),PeriodIndex.intersection(),PeriodIndex.symmetric_difference(),PeriodIndex.difference()теперь преобразуется в тип данных object вместо вызова исключенияIncompatibleFrequencyпри работе с другимPeriodIndexс несовместимым dtype (GH 39306)Ошибка в
IntervalIndex.is_monotonic(),IntervalIndex.get_loc(),IntervalIndex.get_indexer_for(), иIntervalIndex.__contains__()при наличии значений NA (GH 41831)
Индексирование#
Ошибка в
Index.union()иMultiIndex.union()удаление дубликатовIndexзначения, когдаIndexне был монотонным илиsortбыл установлен вFalse(GH 36289, GH 31326, GH 40862)Ошибка в
CategoricalIndex.get_indexer()не удалось вызватьInvalidIndexErrorкогда не уникален (GH 38372)Ошибка в
IntervalIndex.get_indexer()когдаtargetимеетCategoricalDtypeи и индекс, и целевой объект содержат значения NA (GH 41934)Ошибка в
Series.loc()вызовValueErrorкогда входные данные были отфильтрованы с помощью логического списка и устанавливаемые значения были списком с меньшей размерностью (GH 20438)Ошибка при вставке множества новых столбцов в
DataFrameвызывая некорректное последующее поведение индексирования (GH 38380)Ошибка в
DataFrame.__setitem__()вызовValueErrorпри установке нескольких значений в дублирующиеся столбцы (GH 15695)Ошибка в
DataFrame.loc(),Series.loc(),DataFrame.__getitem__()иSeries.__getitem__()возвращает некорректные элементы для немонотонныхDatetimeIndexдля строковых срезов (GH 33146)Ошибка в
DataFrame.reindex()иSeries.reindex()с индексами, учитывающими часовой пояс, вызываяTypeErrorдляmethod="ffill"иmethod="bfill"и указанныйtolerance(GH 38566)Ошибка в
DataFrame.reindex()сdatetime64[ns]илиtimedelta64[ns]неправильное приведение к целым числам, когдаfill_valueтребует приведения к типу object (GH 39755)Ошибка в
DataFrame.__setitem__()вызовValueErrorпри установке на пустойDataFrameиспользуя указанные столбцы и непустойDataFrameзначение (GH 38831)Ошибка в
DataFrame.loc.__setitem__()вызовValueErrorпри работе с уникальным столбцом, когдаDataFrameимеет дублирующиеся столбцы (GH 38521)Ошибка в
DataFrame.iloc.__setitem__()иDataFrame.loc.__setitem__()со смешанными типами данных при установке со значением словаря (GH 38335)Ошибка в
Series.loc.__setitem__()иDataFrame.loc.__setitem__()вызовKeyErrorпри предоставлении логического генератора (GH 39614)Ошибка в
Series.iloc()иDataFrame.iloc()вызовKeyErrorпри предоставлении генератора (GH 39614)Ошибка в
DataFrame.__setitem__()не вызывалValueErrorкогда правая сторона являетсяDataFrameс неправильным количеством столбцов (GH 38604)Ошибка в
Series.__setitem__()вызовValueErrorпри установкеSeriesсо скалярным индексатором (GH 38303)Ошибка в
DataFrame.loc()удаление уровнейMultiIndexкогдаDataFrameиспользуемый в качестве входных данных имеет только одну строку (GH 10521)Ошибка в
DataFrame.__getitem__()иSeries.__getitem__()всегда вызывающий исключениеKeyErrorпри срезе существующими строками, гдеIndexимеет миллисекунды (GH 33589)Ошибка при установке
timedelta64илиdatetime64преобразование значений в числовыеSeriesне удалось привести к типу object (GH 39086, GH 39619)Ошибка при установке
Intervalзначения вSeriesилиDataFrameс несоответствующимиIntervalDtypeнеправильное приведение новых значений к существующему типу данных (GH 39120)Ошибка при установке
datetime64значения вSeriesс целочисленным типом данных, некорректно преобразующим значения datetime64 в целые числа (GH 39266)Ошибка при установке
np.datetime64("NaT")вSeriesсDatetime64TZDtypeнеправильно обрабатывал значение без часового пояса как значение с часовым поясом (GH 39769)Ошибка в
Index.get_loc()не вызываяKeyErrorкогдаkey=NaNиmethodуказан, ноNaNне находится вIndex(GH 39382)Ошибка в
DatetimeIndex.insert()при вставкеnp.datetime64("NaT")в индекс с учетом часового пояса, некорректно обрабатывая значение без часового пояса как значение с часовым поясом (GH 39769)Ошибка в некорректном вызове исключения в
Index.insert(), при установке нового столбца, который не может быть размещён в существующемframe.columns, или вSeries.reset_index()илиDataFrame.reset_index()вместо приведения к совместимому типу данных (GH 39068)Ошибка в
RangeIndex.append()где одиночный объект длиной 1 был некорректно объединён (GH 39401)Ошибка в
RangeIndex.astype()где при преобразовании вCategoricalIndex, категории сталиInt64IndexвместоRangeIndex(GH 41263)Ошибка при установке
numpy.timedelta64значения в тип object-dtypeSeriesиспользуя булев индексатор (GH 39488)Ошибка при установке числовых значений в boolean-dtypes
Seriesиспользуяatилиiatне удалось преобразовать в object-dtype (GH 39582)Ошибка в
DataFrame.__setitem__()иDataFrame.iloc.__setitem__()вызовValueErrorпри попытке индексирования срезом строк и установке списка в качестве значений (GH 40440)Ошибка в
DataFrame.loc()не вызываяKeyErrorкогда ключ не был найден вMultiIndexи уровни не были полностью указаны (GH 41170)Ошибка в
DataFrame.loc.__setitem__()когда установка-с-расширением некорректно вызывала ошибку, когда индекс в расширяющейся оси содержал дубликаты (GH 40096)Ошибка в
DataFrame.loc.__getitem__()сMultiIndexприведение к float, когда хотя бы один столбец индекса имеет тип float и мы извлекаем скаляр (GH 41369)Ошибка в
DataFrame.loc()неправильное сопоставление небулевых элементов индекса (GH 20432)Ошибка при индексировании с
np.nanнаSeriesилиDataFrameсCategoricalIndexнекорректное возбуждениеKeyErrorкогдаnp.nanключи присутствуют (GH 41933)Ошибка в
Series.__delitem__()сExtensionDtypeнеправильное приведение кndarray(GH 40386)Ошибка в
DataFrame.at()сCategoricalIndexвозвращая некорректные результаты при передаче целочисленных ключей (GH 41846)Ошибка в
DataFrame.loc()возвращаяMultiIndexв неправильном порядке, если индексатор имеет дубликаты (GH 40978)Ошибка в
DataFrame.__setitem__()вызовTypeErrorпри использованииstrподкласс как имя столбца сDatetimeIndex(GH 37366)Ошибка в
PeriodIndex.get_loc()не удалось вызватьKeyErrorкогда заданPeriodс несоответствиемfreq(GH 41670)Ошибка
.loc.__getitem__сUInt64Indexи отрицательные целочисленные ключи, вызывающиеOverflowErrorвместоKeyErrorв некоторых случаях, переходя к положительным целым числам в других (GH 41777)Ошибка в
Index.get_indexer()не удалось вызватьValueErrorв некоторых случаях с недопустимымиmethod,limit, илиtoleranceаргументы (GH 41918)Ошибка при срезе
SeriesилиDataFrameсTimedeltaIndexпри передаче недопустимой строки вызываетValueErrorвместоTypeError(GH 41821)Ошибка в
Indexконструктор иногда молча игнорирует указанныйdtype(GH 38879)Index.where()поведение теперь зеркалируетIndex.putmask()поведение, т.е.index.where(mask, other)соответствуетindex.putmask(~mask, other)(GH 39412)
Отсутствует#
Ошибка в
Grouperнеправильно распространялdropnaаргумент;DataFrameGroupBy.transform()теперь корректно обрабатывает пропущенные значения дляdropna=True(GH 35612)Ошибка в
isna(),Series.isna(),Index.isna(),DataFrame.isna(), и соответствующийnotnaфункции не распознаютDecimal("NaN")объекты (GH 39409)Ошибка в
DataFrame.fillna()не принимает словарь дляdowncastключевое слово (GH 40809)Ошибка в
isna()не возвращает копию маски для нулевых типов, что приводит к изменению исходного массива при любой последующей модификации маски (GH 40935)Ошибка в
DataFrameсоздание с данными с плавающей точкой, содержащимиNaNи целое числоdtypeприведение вместо сохраненияNaN(GH 26919)Ошибка в
Series.isin()иMultiIndex.isin()не рассматривал все nan как эквивалентные, если они были в кортежах (GH 41836)
MultiIndex#
Ошибка в
DataFrame.drop()вызовTypeErrorкогдаMultiIndexне является уникальным иlevelне предоставлен (GH 36293)Ошибка в
MultiIndex.intersection()дублированиеNaNв результате (GH 38623)Ошибка в
MultiIndex.equals()некорректно возвращаетTrueкогдаMultiIndexсодержалNaNдаже когда они упорядочены по-разному (GH 38439)Ошибка в
MultiIndex.intersection()всегда возвращает пустой результат при пересечении сCategoricalIndex(GH 38653)Ошибка в
MultiIndex.difference()некорректное возбуждениеTypeErrorкогда индексы содержат несортируемые записи (GH 41915)Ошибка в
MultiIndex.reindex()вызовValueErrorпри использовании на пустомMultiIndexи индексация только определенного уровня (GH 41170)Ошибка в
MultiIndex.reindex()вызовTypeErrorпри переиндексации относительно плоскогоIndex(GH 41707)
I/O#
Ошибка в
Index.__repr__()когдаdisplay.max_seq_items=1(GH 38415)Ошибка в
read_csv()не распознаёт научную нотацию, если аргументdecimalустановлен иengine="python"(GH 31920)Ошибка в
read_csv()интерпретацияNAзначение как комментарий, когдаNAсодержит строку комментария, исправленную дляengine="python"(GH 34002)Ошибка в
read_csv()вызовIndexErrorс несколькими заголовочными столбцами иindex_colуказывается, когда файл не содержит строк данных (GH 38292)Ошибка в
read_csv()не принимаетusecolsс длиной, отличной отnamesдляengine="python"(GH 16469)Ошибка в
read_csv()возвращение типа данных object, когдаdelimiter=","сusecolsиparse_datesуказано дляengine="python"(GH 35873)Ошибка в
read_csv()вызовTypeErrorкогдаnamesиparse_datesуказан дляengine="c"(GH 33699)Ошибка в
read_clipboard()иDataFrame.to_clipboard()не работает в WSL (GH 38527)Разрешить пользовательские значения ошибок для
parse_datesаргументread_sql(),read_sql_query()иread_sql_table()(GH 35185)Ошибка в
DataFrame.to_hdf()иSeries.to_hdf()вызовKeyErrorпри попытке применить для подклассовDataFrameилиSeries(GH 33748)Ошибка в
HDFStore.put()вызывая неправильноеTypeErrorпри сохранении DataFrame с нестроковым типом данных (GH 34274)Ошибка в
json_normalize()приводя к тому, что первый элемент объекта-генератора не включается в возвращаемый DataFrame (GH 35923)Ошибка в
read_csv()применение разделителя тысяч к столбцам дат, когда столбец должен быть разобран на даты иusecolsуказан дляengine="python"(GH 39365)Ошибка в
read_excel()прямое заполнениеMultiIndexимена при указании нескольких заголовочных и индексных столбцов (GH 34673)Ошибка в
read_excel()не учитываяset_option()(GH 34252)Ошибка в
read_csv()не переключаяtrue_valuesиfalse_valuesдля nullable Boolean dtype (GH 34655)Ошибка в
read_json()когдаorient="split"не поддерживая числовой строковый индекс (GH 28556)read_sql()возвращал пустой генератор, еслиchunksizeбыл ненулевым, и запрос не вернул результатов. Теперь возвращает генератор с одним пустым DataFrame (GH 34411)Ошибка в
read_hdf()возврат неожиданных записей при фильтрации по категориальным строковым столбцам с использованиемwhereпараметр (GH 39189)Ошибка в
read_sas()вызовValueErrorкогдаdatetimesбыли нулевыми (GH 39725)Ошибка в
read_excel()удаление пустых значений из одностолбцовых электронных таблиц (GH 39808)Ошибка в
read_excel()загрузка пустых строк/столбцов в конце для некоторых типов файлов (GH 41167)Ошибка в
read_excel()вызовAttributeErrorкогда файл Excel имелMultiIndexзаголовок, за которым следуют две пустые строки и нет индекса (GH 40442)Ошибка в
read_excel(),read_csv(),read_table(),read_fwf(), иread_clipboard()где одна пустая строка послеMultiIndexзаголовок без индекса будет удален (GH 40442)Ошибка в
DataFrame.to_string()неправильное размещение столбца усечения приindex=False(GH 40904)Ошибка в
DataFrame.to_string()добавление лишней точки и смещение строки усечения приindex=False(GH 40904)Ошибка в
read_orc()всегда вызываетAttributeError(GH 40918)Ошибка в
read_csv()иread_table()тихо игнорируяprefixifnamesиprefixопределены, теперь вызываяValueError(GH 39123)Ошибка в
read_csv()иread_excel()не учитывая dtype для дублированного имени столбца приmangle_dupe_colsустановлено вTrue(GH 35211)Ошибка в
read_csv()тихо игнорируяsepifdelimiterиsepопределены, теперь вызываяValueError(GH 39823)Ошибка в
read_csv()иread_table()неправильная интерпретация аргументов приsys.setprofileбыл ранее вызван (GH 41069)Ошибка при преобразовании из PyArrow в pandas (например, при чтении Parquet) с нулевыми типами данных и массивом PyArrow, размер буфера данных которого не кратен размеру типа данных (GH 40896)
Ошибка в
read_excel()вызывала ошибку, когда pandas не мог определить тип файла, даже если пользователь указалengineаргумент (GH 41225)Ошибка в
read_clipboard()копирование из файла Excel смещает значения в неправильный столбец, если в первом столбце есть нулевые значения (GH 41108)Ошибка в
DataFrame.to_hdf()иSeries.to_hdf()вызовTypeErrorпри попытке добавить строковый столбец к несовместимому столбцу (GH 41897)
Period#
Построение графиков#
Ошибка в
plotting.scatter_matrix()вызов исключения при 2daxпереданный аргумент (GH 16253)Предотвращение предупреждений при использовании
constrained_layoutвключен (GH 25261)Ошибка в
DataFrame.plot()показывал неправильные цвета в легенде, если функция вызывалась повторно и некоторые вызовы использовалиyerrв то время как другие не поддерживали (GH 39522)Ошибка в
DataFrame.plot()показывал неправильные цвета в легенде, если функция вызывалась повторно и некоторые вызовы использовалиsecondary_yи другие используютlegend=False(GH 40044)Ошибка в
DataFrame.plot.box()когдаdark_backgroundтема была выбрана, маркеры верхнего/нижнего регистра или мин/макс для графика не были видны (GH 40769)
Groupby/resample/rolling#
Ошибка в
DataFrameGroupBy.agg()иSeriesGroupBy.agg()сPeriodDtypeстолбцы некорректно приводят результаты слишком агрессивно (GH 38254)Ошибка в
SeriesGroupBy.value_counts()где ненаблюдаемые категории в сгруппированной категориальной Series не учитывались (GH 38672)Ошибка в
SeriesGroupBy.value_counts()где ошибка возникала на пустом Series (GH 39172)Ошибка в
GroupBy.indices()содержал бы несуществующие индексы, когда в ключах группировки присутствовали нулевые значения (GH 9304)Исправлена ошибка в
DataFrameGroupBy.sum()иSeriesGroupBy.sum()вызывая потерю точности, теперь используя суммирование Кахана (GH 38778)Исправлена ошибка в
DataFrameGroupBy.cumsum(),SeriesGroupBy.cumsum(),DataFrameGroupBy.mean(), иSeriesGroupBy.mean()вызывая потерю точности из-за использования суммирования Кахана (GH 38934)Ошибка в
Resampler.aggregate()иDataFrame.transform()вызовTypeErrorвместоSpecificationErrorкогда отсутствующие ключи имели смешанные типы данных (GH 39025)Ошибка в
DataFrameGroupBy.idxmin()иDataFrameGroupBy.idxmax()сExtensionDtypeстолбцы (GH 38733)Ошибка в
Series.resample()вызывал ошибку, когда индекс былPeriodIndexсостоящий изNaT(GH 39227)Ошибка в
RollingGroupby.corr()иExpandingGroupby.corr()где столбец groupby вернет0вместоnp.nanпри указанииotherкоторый был длиннее каждой группы (GH 39591)Ошибка в
ExpandingGroupby.corr()иExpandingGroupby.cov()где1будет возвращено вместоnp.nanпри указанииotherкоторый был длиннее каждой группы (GH 39591)Ошибка в
DataFrameGroupBy.mean(),SeriesGroupBy.mean(),DataFrameGroupBy.median(),SeriesGroupBy.median(), иDataFrame.pivot_table()не распространяются метаданные (GH 28283)Ошибка в
Series.rolling()иDataFrame.rolling()неправильный расчёт границ окна, когда окно является смещением, а даты расположены в порядке убывания (GH 40002)Ошибка в
Series.groupby()иDataFrame.groupby()на пустомSeriesилиDataFrameтерял индекс, столбцы и/или типы данных при непосредственном использовании методовidxmax,idxmin,mad,min,max,sum,prod, иskewили используя их черезapply,aggregate, илиresample(GH 26411)Ошибка в
DataFrameGroupBy.apply()иSeriesGroupBy.apply()гдеMultiIndexбудет создан вместоIndexпри использовании наRollingGroupbyобъект (GH 39732)Ошибка в
DataFrameGroupBy.sample()где возникала ошибка, когдаweightsбыл указан, и индекс былInt64Index(GH 39927)Ошибка в
DataFrameGroupBy.aggregate()иResampler.aggregate()иногда вызывалSpecificationErrorпри передаче словаря и отсутствии столбцов; теперь всегда будет вызыватьKeyErrorвместо (GH 40004)Ошибка в
DataFrameGroupBy.sample()где выбор столбца не применялся перед вычислением результата (GH 39928)Ошибка в
ExponentialMovingWindowпри вызове__getitem__неправильно вызывал быValueErrorпри указанииtimes(GH 40164)Ошибка в
ExponentialMovingWindowпри вызове__getitem__не сохранялcom,span,alphaилиhalflifeатрибуты (GH 40164)ExponentialMovingWindowтеперь вызываетNotImplementedErrorпри указанииtimesсadjust=Falseиз-за некорректного расчета (GH 40098)Ошибка в
ExponentialMovingWindowGroupby.mean()гдеtimesаргумент игнорировался, когдаengine='numba'(GH 40951)Ошибка в
ExponentialMovingWindowGroupby.mean()где использовались неправильные времена в случае нескольких групп (GH 40951)Ошибка в
ExponentialMovingWindowGroupbyгде вектор времени и значения рассинхронизировались для нетривиальных групп (GH 40951)Ошибка в
Series.asfreq()иDataFrame.asfreq()удаление строк, когда индекс не был отсортирован (GH 39805)Ошибка в агрегационных функциях для
DataFrameне учитываяnumeric_onlyаргумент, когдаlevelключевое слово было указано (GH 40660)Ошибка в
SeriesGroupBy.aggregate()где использование пользовательской функции для агрегации Series с типом objectIndexвызывает некорректноеIndexформа (GH 40014)Ошибка в
RollingGroupbyгдеas_index=Falseаргумент вgroupbyигнорировался (GH 39433)Ошибка в
DataFrameGroupBy.any(),SeriesGroupBy.any(),DataFrameGroupBy.all()иSeriesGroupBy.all()вызовValueErrorпри использовании со столбцами nullable type, содержащимиNAдаже сskipna=True(GH 40585)Ошибка в
DataFrameGroupBy.cummin(),SeriesGroupBy.cummin(),DataFrameGroupBy.cummax()иSeriesGroupBy.cummax()неправильное округление целочисленных значений околоint64ограничения реализации (GH 40767)Ошибка в
DataFrameGroupBy.rank()иSeriesGroupBy.rank()с nullable типами данных, некорректно вызывающимиTypeError(GH 41010)Ошибка в
DataFrameGroupBy.cummin(),SeriesGroupBy.cummin(),DataFrameGroupBy.cummax()иSeriesGroupBy.cummax()вычисление неверного результата с обнуляемыми типами данных, слишком большими для обратного преобразования при приведении к float (GH 37493)Ошибка в
DataFrame.rolling()возвращая среднее значение ноль для всехNaNокно сmin_periods=0если вычисление не является численно стабильным (GH 41053)Ошибка в
DataFrame.rolling()возвращает сумму, не равную нулю для всехNaNокно сmin_periods=0если вычисление не является численно стабильным (GH 41053)Ошибка в
SeriesGroupBy.agg()не удается сохранить упорядоченностьCategoricalDtypeна агрегациях, сохраняющих порядок (GH 41147)Ошибка в
DataFrameGroupBy.min(),SeriesGroupBy.min(),DataFrameGroupBy.max()иSeriesGroupBy.max()с несколькими столбцами типа object иnumeric_only=Falseнекорректно вызывалValueError(GH 41111)Ошибка в
DataFrameGroupBy.rank()с объектом GroupByaxis=0иrankключевое слово методаaxis=1(GH 41320)Ошибка в
DataFrameGroupBy.__getitem__()с не уникальными столбцами некорректно возвращает неправильно сформированныйSeriesGroupByвместоDataFrameGroupBy(GH 41427)Ошибка в
DataFrameGroupBy.transform()с неуникальными столбцами, ошибочно вызываяAttributeError(GH 41427)Ошибка в
Resampler.apply()с неуникальными столбцами некорректно удалял дублирующиеся столбцы (GH 41445)Ошибка в
Series.groupby()агрегации, некорректно возвращающие пустыеSeriesвместо вызова исключенияTypeErrorпри агрегациях, которые недопустимы для его dtype, например.prodсdatetime64[ns]тип данных (GH 41342)Ошибка в
DataFrameGroupByагрегации, некорректно не удаляющие столбцы с недопустимыми типами данных для этой агрегации, когда нет допустимых столбцов (GH 41291)Ошибка в
DataFrame.rolling.__iter__()гдеonне был назначен индексу результирующих объектов (GH 40373)Ошибка в
DataFrameGroupBy.transform()иDataFrameGroupBy.agg()сengine="numba"где*argsкэшировались с переданной пользователем функцией (GH 41647)Ошибка в
DataFrameGroupByметодыagg,transform,sum,bfill,ffill,pad,pct_change,shift,ohlcудаление.columns.names(GH 41497)
Изменение формы#
Ошибка в
merge()вызывая ошибку при выполнении внутреннего соединения с частичным индексом иright_index=Trueкогда не было пересечения между индексами (GH 33814)Ошибка в
DataFrame.unstack()с отсутствующими уровнями привело к некорректным именам индексов (GH 37510)Ошибка в
merge_asof()распространение правильного Index сleft_index=Trueиright_onспецификации вместо левого индекса (GH 33463)Ошибка в
DataFrame.join()на DataFrame сMultiIndexвозвращал неверный результат, когда один из обоих индексов имел только один уровень (GH 36909)merge_asof()теперь вызываетValueErrorвместо загадочногоTypeErrorв случае немержных столбцов слияния (GH 29130)Ошибка в
DataFrame.join()неправильное присвоение значений, когда DataFrame имелMultiIndexгде хотя бы одно измерение имело тип данныхCategoricalс неотсортированными по алфавиту категориями (GH 38502)Series.value_counts()иSeries.mode()теперь возвращает согласованные ключи в исходном порядке (GH 12679, GH 11227 и GH 39007)Ошибка в
DataFrame.stack()не обрабатываяNaNвMultiIndexстолбцы корректно (GH 39481)Ошибка в
DataFrame.apply()давал некорректные результаты, когда аргументfuncбыла строкой,axis=1, и аргумент axis не поддерживался; теперь вызываетValueErrorвместо (GH 39211)Ошибка в
DataFrame.sort_values()неправильное изменение формы индекса после сортировки по столбцам, когдаignore_index=True(GH 39464)Ошибка в
DataFrame.append()возвращение некорректных типов данных при комбинацияхExtensionDtypeтипы данных (GH 39454)Ошибка в
DataFrame.append()возвращение некорректных dtypes при использовании с комбинациямиdatetime64иtimedelta64типы данных (GH 39574)Ошибка в
DataFrame.append()сDataFrameсMultiIndexи добавлениеSeriesчейIndexне являетсяMultiIndex(GH 41707)Ошибка в
DataFrame.pivot_table()возвращаяMultiIndexдля одного значения при работе с пустым DataFrame (GH 13483)Indexтеперь можно передать вnumpy.all()функция (GH 40180)Ошибка в
DataFrame.stack()не сохраняяCategoricalDtypeвMultiIndex(GH 36991)Ошибка в
to_datetime()вызывает ошибку, когда входная последовательность содержит нехэшируемые элементы (GH 39756)Ошибка в
Series.explode()сохраняя индекс приignore_indexбылTrueи значения были скалярами (GH 40487)Ошибка в
to_datetime()вызовValueErrorкогдаSeriesсодержитNoneиNaTи имеет более 50 элементов (GH 39882)Ошибка в
Series.unstack()иDataFrame.unstack()с значениями типа object, содержащими объекты datetime с часовыми поясами, ошибочно вызывающимиTypeError(GH 41875)Ошибка в
DataFrame.melt()вызовInvalidIndexErrorкогдаDataFrameимеет дублирующиеся столбцы, используемые какvalue_vars(GH 41951)
Разреженный#
Ошибка в
DataFrame.sparse.to_coo()вызовKeyErrorсо столбцами, которые являются числовымиIndexбез0(GH 18414)Ошибка в
SparseArray.astype()сcopy=Falseвыдавая некорректные результаты при переходе от целочисленного типа данных к типу данных с плавающей точкой (GH 34456)Ошибка в
SparseArray.max()иSparseArray.min()всегда возвращал бы пустой результат (GH 40921)
ExtensionArray#
Ошибка в
DataFrame.where()когдаotherявляется Series сExtensionDtype(GH 38729)Исправлена ошибка, где
Series.idxmax(),Series.idxmin(),Series.argmax(), иSeries.argmin()завершалось ошибкой, когда исходные данные являютсяExtensionArray(GH 32749, GH 33719, GH 36566)Исправлена ошибка, при которой некоторые свойства подклассов
PandasExtensionDtypeгде неправильно кэшированы (GH 40329)Ошибка в
DataFrame.mask()где маскирование DataFrame сExtensionDtypeвызываетValueError(GH 40941)
Styler#
Ошибка в
Stylerгдеsubsetаргумент в методах вызывал ошибку для некоторых допустимых срезов MultiIndex (GH 33562)Stylerотображаемый HTML-вывод претерпел незначительные изменения для поддержки стандартов хорошего кода w3 (GH 39626)Ошибка в
Stylerгде отображаемый HTML не содержал идентификатор класса столбца для определенных заголовочных ячеек (GH 39716)Ошибка в
Styler.background_gradient()где цвет текста не определялся корректно (GH 39888)Ошибка в
Styler.set_table_styles()где несколько элементов в CSS-селекторахtable_stylesаргумент не был правильно добавлен (GH 34061)Ошибка в
Stylerгде копирование из Jupyter удалило верхнюю левую ячейку и сместило заголовки (GH 12147)Ошибка в
Styler.whereгдеkwargsне были переданы в соответствующий вызываемый объект (GH 40845)Ошибка в
Stylerвызывая дублирование CSS при множественных рендерах (GH 39395, GH 40334)
Другие#
inspect.getmembers(Series)больше не вызываетAbstractMethodError(GH 38782)Ошибка в
Series.where()с числовым dtype иother=Noneне преобразуя вnan(GH 39761)Ошибка в
assert_series_equal(),assert_frame_equal(),assert_index_equal()иassert_extension_array_equal()некорректно вызывал исключение, когда атрибут имеет нераспознанный тип NA (GH 39461)Ошибка в
assert_index_equal()сexact=Trueне вызывает ошибку при сравненииCategoricalIndexэкземпляры сInt64IndexиRangeIndexкатегории (GH 41263)Ошибка в
DataFrame.equals(),Series.equals(), иIndex.equals()с объектным типом, содержащимnp.datetime64("NaT")илиnp.timedelta64("NaT")(GH 39650)Ошибка в
show_versions()где вывод JSON в консоли не был корректным JSON (GH 39701)pandas теперь может компилироваться на z/OS при использовании xlc (GH 35826)
Ошибка в
pandas.util.hash_pandas_object()не распознаваяhash_key,encodingиcategorizeкогда тип входного объекта являетсяDataFrame(GH 41404)
Участники#
Всего 251 человек внесли патчи в этот релиз. Люди с «+» рядом с именами внесли патч впервые.
Abhishek R +
Ада Драгинда
Adam J. Stewart
Adam Turner +
Aidan Feldman +
Ajitesh Singh +
Акшат Джайн +
Albert Villanova del Moral
Alexandre Prince-Levasseur +
Andrew Hawyrluk +
Andrew Wieteska
AnglinaBhambra +
Анкуш Дуа +
Анна Даглис
Ashlan Parker +
Ашвани +
Avinash Pancham
Ayushman Kumar +
BeanNan
Benoît Vinot
Bharat Raghunathan
Bijay Regmi +
Bobin Mathew +
Bogdan Pilyavets +
Brian Hulette +
Brian Sun +
Брок +
Bryan Cutler
Калеб +
Калвин Хо +
Chathura Widanage +
Chinmay Rane +
Крис Линч
Крис Уитерс
Christos Petropoulos
Corentin Girard +
DaPy15 +
Damodara Puddu +
Daniel Hrisca
Daniel Saxton
DanielFEvans
Dare Adewumi +
Dave Willmer
David Schlachter +
David-dmh +
Deepang Raval +
Doris Lee +
Dr. Jan-Philip Gehrcke +
DriesS +
Dylan Percy
Эрфан Нариман
Eric Leung
EricLeer +
Eve
Fangchen Li
Феликс Диво
Флориан Йеттер
Fred Reiss
GFJ138 +
Gaurav Sheni +
Geoffrey B. Eisenbarth +
Gesa Stupperich +
Griffin Ansel +
Густаво К. Масиэль +
Heidi +
Henry +
Hung-Yi Wu +
Ian Ozsvald +
Ирв Ластиг
Isaac Chung +
Isaac Virshup
JHM Darbyshire (MBP) +
JHM Darbyshire (iMac) +
Jack Liu +
James Lamb +
Jeet Parekh
Jeff Reback
Jiezheng2018 +
Jody Klymak
Johan Kåhrström +
John McGuigan
Joris Van den Bossche
Jose
JoseNavy
Josh Dimarsky
Josh Friedlander
Джошуа Кляйн +
Julia Signell
Julian Schnitzler +
Kaiqi Dong
Касим Панджри +
Katie Smith +
Kelly +
Kenil +
Keppler, Kyle +
Кевин Шеппард
Кхор Чиан Вей +
Кили Хьюитт +
Larry Wong +
Lightyears +
Lucas Holtz +
Lucas Rodés-Guirao
Lucky Sivagurunathan +
Luis Pinto
Maciej Kos +
Марк Гарсия
Марко Эдвард Горелли +
Марко Горелли
MarcoGorelli +
Mark Graham
Martin Dengler +
Martin Grigorov +
Marty Rudolf +
Мэтт Рёшке
Мэтью Рёшке
Matthew Zeitlin
Max Bolingbroke
Максим Иванов
Максим Купфер +
Mayur +
MeeseeksMachine
Micael Jarniac
Michael Hsieh +
Michel de Ruiter +
Mike Roberts +
Miroslav Šedivý
Мохаммад Джафар Машхади
Morisa Manzella +
Mortada Mehyar
Muktan +
Naveen Agrawal +
Ноа
Nofar Mishraki +
Oleh Kozynets
Olga Matoula +
Oli +
Омар Афифи
Omer Ozarslan +
Owen Lamont +
Ozan Öğreden +
Команда разработчиков Pandas
Паоло Ламменс
Parfait Gasana +
Patrick Hoefler
Пол Маккарти +
Paulo S. Costa +
Pav A
Peter
Pradyumna Rahul +
Пунитвара +
QP Hou +
Rahul Chauhan
Rahul Sathanapalli
Richard Shadrach
Роберт Брэдшоу
Robin to Roxel
Рохит Гупта
Sam Purkis +
Samuel GIFFARD +
Sean M. Law +
Shahar Naveh +
ShaharNaveh +
Shiv Gupta +
Shrey Dixit +
Shudong Yang +
Simon Boehm +
Simon Hawkins
Sioned Baker +
Stefan Mejlgaard +
Steven Pitman +
Steven Schaerer +
Stéphane Guillou +
TLouf +
Tegar D Pratama +
Терджи Петерсен
Теодорос Николау +
Thomas Dickson
Thomas Li
Томас Смит
Thomas Yu +
ThomasBlauthQC +
Tim Hoffmann
Tom Augspurger
Torsten Wörtwein
Tyler Reddy
UrielMaD
Uwe L. Korn
Venaturum +
VirosaLi
Vladimir Podolskiy
Вьом Патхак +
WANG Aiyong
Waltteri Koskinen +
Вэньцзюнь Си +
William Ayd
Yeshwanth N +
Yuanhao Geng
Zito Relova +
aflah02 +
arredond +
attack68
cdknox +
chinggg +
fathomer +
ftrihardjo +
github-actions[bot] +
gunjan-solanki +
guru kiran
hasan-yaman
i-aki-y +
jbrockmendel
jmholzer +
jordi-crespo +
jotasi +
jreback
juliansmidek +
kylekeppler
lrepiton +
lucasrodes
maroth96 +
mikeronayne +
mlondschien
moink +
morrme
мшмусклер +
mzeitlin11
na2 +
nofarmishraki +
partev
patrick
ptype
перечитать
rhshadrach
rlukevie +
rosagold +
саукоиде +
sdementen +
shawnbrown
sstiijn +
stphnlyd +
sukriti1 +
taytzehao
theOehrly +
theodorju +
thordisstella +
tonyyyyip +
tsinggggg +
tushushu +
vangorade +
vladu +
wertha +