Что нового в версии 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-awaredatetime64столбцы (GH 38723)Исправлена регрессия в
DataFrame.apply()сaxis=1использование строкового аксессора в функции apply (GH 38979)Исправлена регрессия в
DataFrame.replace()вызовValueErrorкогдаDataFrameимеет dtypebytes(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_NUMBERSofDataFrameи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