Что нового в версии 1.2.1 (20 января 2021)#

Это изменения в pandas 1.2.1. См. Примечания к выпуску для полного списка изменений, включая другие версии pandas.

Исправленные регрессии#

  • Исправлена регрессия в to_csv() который создавал поврежденные zip-файлы, когда строк было больше, чем chunksize (GH 38714)

  • Исправлена регрессия в to_csv() открытие codecs.StreamReaderWriter в двоичном режиме вместо текстового режима (GH 39247)

  • Исправлена регрессия в read_csv() и другие функции чтения были политикой ошибок кодирования (errors) не использовали значение по умолчанию "replace" когда кодировка не была указана (GH 38989)

  • Исправлена регрессия в read_excel() с несырыми файловыми дескрипторами (GH 38788)

  • Исправлена регрессия в DataFrame.to_stata() не удаляя созданный файл при возникновении ошибки (GH 39202)

  • Исправлена регрессия в DataFrame.__setitem__ вызов ValueError при расширении DataFrame и новый столбец имеет тип "0 - name" (GH 39010)

  • Исправлена регрессия при установке с DataFrame.loc() вызов ValueError когда DataFrame имеет несортированный MultiIndex столбцы и индексатор является скаляром (GH 38601)

  • Исправлена регрессия при установке с DataFrame.loc() вызов KeyError с MultiIndex и индекс столбцов, подобный списку, расширяющий DataFrame (GH 39147)

  • Исправлена регрессия в groupby() с Categorical столбец группировки не показывает неиспользуемые категории для grouped.indices (GH 38642)

  • Исправлена регрессия в DataFrameGroupBy.sem() и SeriesGroupBy.sem() где наличие нечисловых колонок вызывало ошибку вместо их удаления (GH 38774)

  • Исправлена регрессия в DataFrameGroupBy.diff() вызов исключения для int8 и int16 столбцы (GH 39050)

  • Исправлена регрессия в DataFrame.groupby() при агрегации ExtensionDType это может не сработать для нечисловых значений (GH 38980)

  • Исправлена регрессия в Rolling.skew() и Rolling.kurt() изменение объекта на месте (GH 38908)

  • Исправлена регрессия в DataFrame.any() и DataFrame.all() не возвращает результат для tz-aware datetime64 столбцы (GH 38723)

  • Исправлена регрессия в DataFrame.apply() с axis=1 использование строкового аксессора в функции apply (GH 38979)

  • Исправлена регрессия в DataFrame.replace() вызов ValueError когда DataFrame имеет dtype bytes (GH 38900)

  • Исправлена регрессия в Series.fillna() который поднял RecursionError с datetime64[ns, UTC] тип данных (GH 38851)

  • Исправлена регрессия в сравнениях между NaT и datetime.date объекты некорректно возвращают True (GH 39151)

  • Исправлена регрессия при вызове NumPy accumulate() универсальные функции (ufuncs) на DataFrames, например, np.maximum.accumulate(df) (GH 39259)

  • Исправлена регрессия в repr строк, похожих на числа с плавающей точкой, для object тип данных с обрезанными конечными 0 после десятичной точки (GH 38708)

  • Исправлена регрессия, которая вызывала AttributeError с версиями PyArrow [0.16.0, 1.0.0) (GH 38801)

  • Исправлена регрессия в pandas.testing.assert_frame_equal() вызов TypeError с check_like=True когда Index или столбцы имеют смешанный dtype (GH 39168)

Мы отменили коммит, который привел к нескольким регрессиям, связанным с построением графиков в pandas 1.2.0 (GH 38969, GH 38736, GH 38865, GH 38947 и GH 39126). В результате ошибки, заявленные как исправленные в pandas 1.2.0, связанные с непоследовательной маркировкой делений на гистограммах, снова присутствуют (GH 26186 и GH 11465)

Вызов функций NumPy ufuncs на невыровненных DataFrame#

До pandas 1.2.0 вызов функции NumPy ufunc на невыровненных DataFrame (или комбинации DataFrame / Series) игнорировал индексы, сопоставлял входные данные только по форме и использовал индекс/столбцы первого DataFrame для результата:

In [1]: df1 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[0, 1])
In [2]: df2 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[1, 2])
In [3]: df1
Out[3]:
   a  b
0  1  3
1  2  4
In [4]: df2
Out[4]:
   a  b
1  1  3
2  2  4

In [5]: np.add(df1, df2)
Out[5]:
   a  b
0  2  6
1  4  8

Это контрастирует с тем, как работают другие операции pandas, которые сначала выравнивают входные данные:

In [6]: df1 + df2
Out[6]:
     a    b
0  NaN  NaN
1  3.0  7.0
2  NaN  NaN

В pandas 1.2.0 мы переработали вызов NumPy ufuncs на DataFrames, и это начало выравнивать входные данные сначала (GH 39184), как происходит в других операциях pandas и как происходит для ufuncs, вызываемых на объектах Series.

Для pandas 1.2.1 мы восстановили предыдущее поведение, чтобы избежать критического изменения, но приведенный выше пример np.add(df1, df2) с невыровненными входными данными теперь будет вызывать предупреждение, а в будущем выпуске pandas 2.0 начнётся сначала выравнивание входных данных (GH 39184). Вызов функции NumPy ufunc на объектах Series (например, np.add(s1, s2)) уже выравнивает и продолжает это делать.

Чтобы избежать предупреждения и сохранить текущее поведение игнорирования индексов, преобразуйте один из аргументов в массив NumPy:

In [7]: np.add(df1, np.asarray(df2))
Out[7]:
   a  b
0  2  6
1  4  8

Чтобы получить будущее поведение и отключить предупреждение, вы можете выровнять вручную перед передачей аргументов в ufunc:

In [8]: df1, df2 = df1.align(df2)
In [9]: np.add(df1, df2)
Out[9]:
     a    b
0  NaN  NaN
1  3.0  7.0
2  NaN  NaN

Исправления ошибок#

  • Ошибка в read_csv() с float_precision="high" вызывало segfault или неправильный разбор длинных строк экспоненты. Это привело к регрессии в некоторых случаях, так как значение по умолчанию для float_precision был изменён в pandas 1.2.0 (GH 38753)

  • Ошибка в read_csv() не закрывает открытый файловый дескриптор, когда csv.Error или UnicodeDecodeError произошла при инициализации (GH 39024)

  • Ошибка в pandas.testing.assert_index_equal() вызов TypeError с check_order=False когда Index имеет смешанный тип данных (GH 39168)

Другие#

  • Устаревшие атрибуты _AXIS_NAMES и _AXIS_NUMBERS of DataFrame и Series больше не будет отображаться в dir или inspect.getmembers вызовы (GH 38740)

  • Повышена минимальная версия fastparquet до 0.4.0, чтобы избежать AttributeError из numba (GH 38344)

  • Минимальная версия pymysql увеличена до 0.8.1 для предотвращения сбоев тестов (GH 38344)

  • Исправлена ошибка сборки на MacOS 11 в Python 3.9.1 (GH 38766)

  • Добавлена ссылка на обратно несовместимые check_freq аргумент testing.assert_frame_equal() и testing.assert_series_equal() в pandas 1.1.0 что нового (GH 34050)

Участники#

Всего 20 человек внесли патчи в этот выпуск. Люди с «+» рядом с именами внесли патч впервые.

  • Ada Draginda +

  • Andrew Wieteska

  • Bryan Cutler

  • Fangchen Li

  • Joris Van den Bossche

  • Мэтью Рёшке

  • Мэтью Цейтлин +

  • MeeseeksMachine

  • Micael Jarniac

  • Omar Afifi +

  • Команда разработчиков Pandas

  • Richard Shadrach

  • Simon Hawkins

  • Терджи Петерсен

  • Torsten Wörtwein

  • WANG Aiyong

  • jbrockmendel

  • kylekeppler

  • mzeitlin11

  • patrick