Что нового в версии 2.0.0 (3 апреля 2023)#
Это изменения в pandas 2.0.0. См. Примечания к выпуску для полного списка изменений, включая другие версии pandas.
Улучшения#
Установка дополнительных зависимостей с помощью pip extras#
При установке pandas с помощью pip, наборы опциональных зависимостей также могут быть установлены путём указания extras.
pip install "pandas[performance, aws]>=2.0.0"
Доступные дополнительные возможности, найденные в руководство по установке, являются
[all, performance, computation, fss, aws, gcp, excel, parquet, feather, hdf5, spss, postgresql, mysql,
sql-other, html, xml, plot, output_formatting, clipboard, compression, test] (GH 39164).
Index теперь может содержать числовые типы данных numpy#
Теперь можно использовать любой числовой dtype numpy в Index (GH 42717).
Ранее можно было использовать только int64, uint64 & float64 dtypes:
In [1]: pd.Index([1, 2, 3], dtype=np.int8)
Out[1]: Int64Index([1, 2, 3], dtype="int64")
In [2]: pd.Index([1, 2, 3], dtype=np.uint16)
Out[2]: UInt64Index([1, 2, 3], dtype="uint64")
In [3]: pd.Index([1, 2, 3], dtype=np.float32)
Out[3]: Float64Index([1.0, 2.0, 3.0], dtype="float64")
Int64Index, UInt64Index & Float64Index были устаревшими в pandas версии 1.4 и теперь удалены. Вместо этого Index должен использоваться напрямую, и
может ли он теперь принимать все числовые типы данных numpy, т.е.
int8/ int16/int32/int64/uint8/uint16/uint32/uint64/float32/float64 dtypes:
In [1]: pd.Index([1, 2, 3], dtype=np.int8)
Out[1]: Index([1, 2, 3], dtype='int8')
In [2]: pd.Index([1, 2, 3], dtype=np.uint16)
Out[2]: Index([1, 2, 3], dtype='uint16')
In [3]: pd.Index([1, 2, 3], dtype=np.float32)
Out[3]: Index([1.0, 2.0, 3.0], dtype='float32')
Возможность для Index для хранения numpy числовых типов данных привело к некоторым изменениям в функциональности Pandas.
В частности, операции, которые ранее были вынуждены создавать 64-битные индексы,
теперь могут создавать индексы с меньшей разрядностью, например, 32-битные индексы.
Ниже приведен возможно неисчерпывающий список изменений:
Создание экземпляра с использованием числового массива numpy теперь следует типу данных массива numpy. Ранее все индексы, созданные из числовых массивов numpy, принудительно преобразовывались в 64-битные. Теперь, например,
Index(np.array([1, 2, 3]))будетint32в 32-битных системах, где ранее это было быint64даже на 32-битных системах. Создание экземпляраIndexиспользование списка чисел все равно вернет 64-битные типы данных, например.Index([1, 2, 3])будет иметьint64dtype, который совпадает с предыдущим.Различные числовые атрибуты datetime у
DatetimeIndex(day,month,yearи т.д.) ранее были типа dtypeint64, в то время как они былиint32дляarrays.DatetimeArray. Теперь ониint32наDatetimeIndexтакже:In [4]: idx = pd.date_range(start='1/1/2018', periods=3, freq='ME') In [5]: idx.array.year Out[5]: array([2018, 2018, 2018], dtype=int32) In [6]: idx.year Out[6]: Index([2018, 2018, 2018], dtype='int32')
Типы данных уровней в индексах из
Series.sparse.from_coo()теперь имеют тип данныхint32, такой же, как наrows/colsна разреженной матрице scipy. Ранее они имели dtypeint64.In [7]: from scipy import sparse In [8]: A = sparse.coo_matrix( ...: ([3.0, 1.0, 2.0], ([1, 0, 0], [0, 2, 3])), shape=(3, 4) ...: ) ...: In [9]: ser = pd.Series.sparse.from_coo(A) In [10]: ser.index.dtypes Out[10]: level_0 int32 level_1 int32 dtype: object
Indexне может быть создан с использованием типа данных float16. Ранее созданиеIndexиспользуя dtypefloat16привело кFloat64Indexсfloat64dtype. Теперь возникаетNotImplementedError:In [11]: pd.Index([1, 2, 3], dtype=np.float16) --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) Cell In[11], line 1 ----> 1 pd.Index([1, 2, 3], dtype=np.float16) File ~/work/pandas/pandas/pandas/core/indexes/base.py:577, in Index.__new__(cls, data, dtype, copy, name, tupleize_cols) 573 arr = ensure_wrapped_if_datetimelike(arr) 575 klass = cls._dtype_to_subclass(arr.dtype) --> 577 arr = klass._ensure_array(arr, arr.dtype, copy=False) 578 result = klass._simple_new(arr, name, refs=refs) 579 if dtype is None and is_pandas_object and data_dtype == np.object_: File ~/work/pandas/pandas/pandas/core/indexes/base.py:602, in Index._ensure_array(cls, data, dtype, copy) 599 raise ValueError("Index data must be 1-dimensional") 600 elif dtype == np.float16: 601 # float16 not supported (no indexing engine) --> 602 raise NotImplementedError("float16 indexes are not supported") 604 if copy: 605 # asarray_tuplesafe does not always copy underlying data, 606 # so need to make sure that this happens 607 data = data.copy() NotImplementedError: float16 indexes are not supported
Аргумент dtype_backend, чтобы возвращать nullable типы данных на основе pyarrow или numpy#
Следующие функции получили новый ключевой параметр dtype_backend (GH 36712)
Когда эта опция установлена в "numpy_nullable" он вернет DataFrame который поддерживается обнуляемыми типами данных.
Когда этот ключевой аргумент установлен в "pyarrow", то эти функции вернут nullable-типы на основе pyarrow ArrowDtype DataFrames (GH 48957, GH 49997):
In [12]: import io
In [13]: data = io.StringIO("""a,b,c,d,e,f,g,h,i
....: 1,2.5,True,a,,,,,
....: 3,4.5,False,b,6,7.5,True,a,
....: """)
....:
In [14]: df = pd.read_csv(data, dtype_backend="pyarrow")
In [15]: df.dtypes
Out[15]:
a int64[pyarrow]
b double[pyarrow]
c bool[pyarrow]
d string[pyarrow]
e int64[pyarrow]
f double[pyarrow]
g bool[pyarrow]
h string[pyarrow]
i null[pyarrow]
dtype: object
In [16]: data.seek(0)
Out[16]: 0
In [17]: df_pyarrow = pd.read_csv(data, dtype_backend="pyarrow", engine="pyarrow")
In [18]: df_pyarrow.dtypes
Out[18]:
a int64[pyarrow]
b double[pyarrow]
c bool[pyarrow]
d string[pyarrow]
e int64[pyarrow]
f double[pyarrow]
g bool[pyarrow]
h string[pyarrow]
i null[pyarrow]
dtype: object
Улучшения Copy-on-Write#
Новый механизм ленивого копирования, который откладывает копирование до изменения объекта, был добавлен к методам, перечисленным в Оптимизации Copy-on-Write. Эти методы возвращают представления при включённой копировании при записи, что обеспечивает значительное улучшение производительности по сравнению с обычным выполнением (GH 49473).
Доступ к одному столбцу DataFrame как к Series (например,
df["col"]) теперь всегда возвращает новый объект каждый раз при его создании, когда включен Copy-on-Write (не возвращая несколько раз идентичный, кэшированный объект Series). Это гарантирует, что эти объекты Series правильно следуют правилам Copy-on-Write (GH 49450)The
Seriesконструктор теперь будет создавать ленивую копию (откладывая копирование до изменения данных) при создании Series из существующего Series с параметром по умолчаниюcopy=False(GH 50471)The
DataFrameконструктор теперь создаст ленивую копию (откладывая копирование до модификации данных) при создании из существующегоDataFrameсо значением по умолчаниюcopy=False(GH 51239)The
DataFrameконструктор, при создании DataFrame из словаря объектов Series и указанииcopy=False, теперь будет использовать ленивую копию этих объектов Series для столбцов DataFrame (GH 50777)The
DataFrameконструктор, при построении DataFrame изSeriesилиIndexи указаниеcopy=False, теперь будет учитывать Copy-on-Write.The
DataFrameиSeriesконструкторы при создании из массива NumPy теперь по умолчанию копируют массив, чтобы избежать измененияDataFrame/Seriesпри изменении массива. Укажитеcopy=Falseчтобы получить старое поведение. При установкеcopy=Falsepandas не гарантирует корректное поведение Copy-on-Write, когда массив NumPy изменяется после созданияDataFrame/Series.The
DataFrame.from_records()теперь будет учитывать Copy-on-Write при вызове сDataFrame.Попытка установить значения с помощью цепочки присваиваний (например,
df["a"][1:3] = 0) теперь всегда будет выдавать предупреждение при включенном Copy-on-Write. В этом режиме цепное присваивание никогда не может работать, потому что мы всегда устанавливаем значение во временный объект, который является результатом операции индексирования (getitem), который при Copy-on-Write всегда ведет себя как копия. Таким образом, присваивание через цепочку никогда не может обновить исходный Series или DataFrame. Поэтому выдается информативное предупреждение пользователю, чтобы избежать безмолвного бездействия (GH 49467)DataFrame.replace()теперь будет учитывать механизм Copy-on-Write приinplace=True.DataFrame.transpose()теперь будет учитывать механизм Copy-on-Write.Арифметические операции, которые могут быть выполнены на месте, например.
ser *= 2теперь будут учитывать механизм Copy-on-Write.DataFrame.__getitem__()теперь будет учитывать механизм Copy-on-Write, когдаDataFrameимеетMultiIndexстолбцы.Series.__getitem__()теперь будет учитывать механизм Copy-on-Write, когдаSeriesимеетMultiIndex.
Series.view()теперь будет учитывать механизм Copy-on-Write.
Copy-on-Write может быть включен через один из
pd.set_option("mode.copy_on_write", True)
pd.options.mode.copy_on_write = True
Кроме того, копирование при записи можно включить локально через:
with pd.option_context("mode.copy_on_write", True):
...
Другие улучшения#
Добавлена поддержка для
strметоды доступа при использованииArrowDtypeсpyarrow.stringтип (GH 50325)Добавлена поддержка для
dtметоды доступа при использованииArrowDtypeсpyarrow.timestampтип (GH 50954)read_sas()теперь поддерживает использованиеencoding='infer'для корректного чтения и использования кодировки, указанной в файле sas. (GH 48048)DataFrameGroupBy.quantile(),SeriesGroupBy.quantile()иDataFrameGroupBy.std()теперь сохраняют nullable типы данных вместо приведения к numpy типам данных (GH 37493)DataFrameGroupBy.std(),SeriesGroupBy.std()теперь поддерживают datetime64, timedelta64 иDatetimeTZDtypeтипы данных (GH 48481)Series.add_suffix(),DataFrame.add_suffix(),Series.add_prefix()иDataFrame.add_prefix()поддерживаетaxisаргумент. Еслиaxisустановлен, поведение по умолчанию относительно того, какую ось рассматривать, может быть переопределено (GH 47819)testing.assert_frame_equal()теперь показывает первый элемент, где DataFrames различаются, аналогичноpytestвывод (GH 47910)Добавлен
indexпараметр дляDataFrame.to_dict()(GH 46398)Добавлена поддержка расширенных типов данных массивов в
merge()(GH 44240)Добавлено распространение метаданных для бинарных операторов на
DataFrame(GH 28283)Добавлен
cumsum,cumprod,cumminиcummaxвExtensionArrayинтерфейс через_accumulate(GH 28385)CategoricalConversionWarning,InvalidComparison,InvalidVersion,LossySetitemError, иNoBufferPresentтеперь доступны вpandas.errors(GH 27656)Исправление
testoptional_extra путем добавления отсутствующего тестового пакетаpytest-asyncio(GH 48361)DataFrame.astype()сообщение об исключении улучшено для включения имени столбца, когда преобразование типа невозможно. (GH 47571)date_range()теперь поддерживаетunitключевое слово (“s”, “ms”, “us” или “ns”) для указания желаемого разрешения выходного индекса (GH 49106)timedelta_range()теперь поддерживаетunitключевое слово (“s”, “ms”, “us” или “ns”) для указания желаемого разрешения выходного индекса (GH 49824)DataFrame.to_json()теперь поддерживаетmodeключевое слово с поддерживаемыми вводами 'w' и 'a'. По умолчанию 'w', 'a' можно использовать, когда lines=True и orient='records', чтобы добавить ориентированные на записи строки JSON в существующий файл JSON. (GH 35849)Добавлен
nameпараметр дляIntervalIndex.from_breaks(),IntervalIndex.from_arrays()иIntervalIndex.from_tuples()(GH 48911)Улучшено сообщение об исключении при использовании
testing.assert_frame_equal()наDataFrameвключить столбец, который сравнивается (GH 50323)Улучшено сообщение об ошибке для
merge_asof()когда столбцы соединения были дублированы (GH 50102)Добавлена поддержка типов данных extension array для
get_dummies()(GH 32430)Добавлен
Index.infer_objects()аналогичноSeries.infer_objects()(GH 50034)Добавлен
copyпараметр дляSeries.infer_objects()иDataFrame.infer_objects(), передаваяFalseбудет избегать создания копий для серий или столбцов, которые уже не являются объектами или где не может быть выведен лучший dtype (GH 50096)DataFrame.plot.hist()теперь распознаётxlabelиylabelаргументы (GH 49793)Series.drop_duplicates()получилignore_indexключевое слово для сброса индекса (GH 48304)Series.dropna()иDataFrame.dropna()получилignore_indexключевое слово для сброса индекса (GH 31725)Улучшенное сообщение об ошибке в
to_datetime()для не-ISO8601 форматов, информируя пользователей о позиции первой ошибки (GH 50361)Улучшено сообщение об ошибке при попытке выровнять
DataFrameобъекты (например, вDataFrame.compare()) для уточнения, что "идентично помеченные" относится как к индексу, так и к столбцам (GH 50083)Добавлена поддержка для
Index.min()иIndex.max()для pyarrow строковых типов данных (GH 51397)Добавлен
DatetimeIndex.as_unit()иTimedeltaIndex.as_unit()для преобразования в разные разрешения; поддерживаемые разрешения: «s», «ms», «us» и «ns» (GH 50616)Добавлен
Series.dt.unit()иSeries.dt.as_unit()для преобразования в разные разрешения; поддерживаемые разрешения: «s», «ms», «us» и «ns» (GH 51223)Добавлен новый аргумент
dtypetoread_sql()для согласованности сread_sql_query()(GH 50797)read_csv(),read_table(),read_fwf()иread_excel()теперь принимаютdate_format(GH 50601)to_datetime()теперь принимает"ISO8601"в качестве аргумента дляformat, который будет соответствовать любой строке ISO8601 (но возможно не идентично отформатированной) (GH 50411)to_datetime()теперь принимает"mixed"в качестве аргумента дляformat, который будет определять формат для каждого элемента отдельно (GH 50972)Добавлен новый аргумент
enginetoread_json()для поддержки парсинга JSON с помощью pyarrow путем указанияengine="pyarrow"(GH 48893)Добавлена поддержка SQLAlchemy 2.0 (GH 40686)
Добавлена поддержка для
decimalпараметр, когдаengine="pyarrow"вread_csv()(GH 51302)Indexоперации над множествамиIndex.union(),Index.intersection(),Index.difference(), иIndex.symmetric_difference()теперь поддерживаетsort=True, который всегда возвращает отсортированный результат, в отличие от стандартногоsort=Noneкоторый не сортирует в некоторых случаях (GH 25151)Добавлен новый режим экранирования "latex-math" для избежания экранирования "$" в форматтере (GH 50040)
Значительные исправления ошибок#
Это исправления ошибок, которые могут привести к заметным изменениям в поведении.
DataFrameGroupBy.cumsum() и DataFrameGroupBy.cumprod() переполнение вместо потери точности при приведении к float#
В предыдущих версиях мы приводили к типу float при применении cumsum и cumprod что
приводило к некорректным результатам, даже если результат мог быть сохранен int64 тип данных.
Кроме того, агрегация переполняется согласованно с numpy и обычным
DataFrame.cumprod() и DataFrame.cumsum() методы, когда предел
int64 достигнуто (GH 37493).
Старое поведение
In [1]: df = pd.DataFrame({"key": ["b"] * 7, "value": 625})
In [2]: df.groupby("key")["value"].cumprod()[5]
Out[2]: 5.960464477539062e+16
Мы возвращаем некорректные результаты с 6-м значением.
Новое поведение
In [19]: df = pd.DataFrame({"key": ["b"] * 7, "value": 625})
In [20]: df.groupby("key")["value"].cumprod()
Out[20]:
0 625
1 390625
2 244140625
3 152587890625
4 95367431640625
5 59604644775390625
6 359414837200037393
Name: value, dtype: int64
Мы переполняемся на 7-м значении, но 6-е значение всё ещё корректно.
DataFrameGroupBy.nth() и SeriesGroupBy.nth() теперь ведут себя как фильтрации#
В предыдущих версиях pandas, DataFrameGroupBy.nth() и
SeriesGroupBy.nth() действовали так, как если бы они были агрегациями. Однако для большинства
входных данных n, они могут возвращать либо ноль, либо несколько строк на группу. Это означает,
что они являются фильтрациями, аналогичными, например, DataFrameGroupBy.head(). pandas
теперь рассматривает их как фильтрации (GH 13666).
In [21]: df = pd.DataFrame({"a": [1, 1, 2, 1, 2], "b": [np.nan, 2.0, 3.0, 4.0, 5.0]})
In [22]: gb = df.groupby("a")
Старое поведение
In [5]: gb.nth(n=1)
Out[5]:
A B
1 1 2.0
4 2 5.0
Новое поведение
In [23]: gb.nth(n=1)
Out[23]:
a b
1 1 2.0
4 2 5.0
В частности, индекс результата формируется из входных данных путем выбора соответствующих строк. Также, когда n больше, чем группа, нет строк вместо
NaN возвращается.
Старое поведение
In [5]: gb.nth(n=3, dropna="any")
Out[5]:
B
A
1 NaN
2 NaN
Новое поведение
In [24]: gb.nth(n=3, dropna="any")
Out[24]:
Empty DataFrame
Columns: [a, b]
Index: []
Обратно несовместимые изменения API#
Создание с типом datetime64 или timedelta64 с неподдерживаемым разрешением#
В предыдущих версиях при создании Series или DataFrame и
передача dtype "datetime64" или "timedelta64" с неподдерживаемым разрешением
(т.е. любым, кроме "ns"), pandas молча заменял заданный dtype
на его наносекундный аналог:
Предыдущее поведение:
In [5]: pd.Series(["2016-01-01"], dtype="datetime64[s]")
Out[5]:
0 2016-01-01
dtype: datetime64[ns]
In [6] pd.Series(["2016-01-01"], dtype="datetime64[D]")
Out[6]:
0 2016-01-01
dtype: datetime64[ns]
В pandas 2.0 мы поддерживаем разрешения "s", "ms", "us" и "ns". При передаче поддерживаемого dtype (например, "datetime64[s]"), результат теперь имеет точно запрошенный dtype:
Новое поведение:
In [25]: pd.Series(["2016-01-01"], dtype="datetime64[s]")
Out[25]:
0 2016-01-01
dtype: datetime64[s]
С неподдерживаемым типом данных pandas теперь вызывает исключение вместо тихой замены на поддерживаемый тип данных:
Новое поведение:
In [26]: pd.Series(["2016-01-01"], dtype="datetime64[D]")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[26], line 1
----> 1 pd.Series(["2016-01-01"], dtype="datetime64[D]")
File ~/work/pandas/pandas/pandas/core/series.py:587, in Series.__init__(self, data, index, dtype, name, copy, fastpath)
585 data = data.copy()
586 else:
--> 587 data = sanitize_array(data, index, dtype, copy)
589 manager = _get_option("mode.data_manager", silent=True)
590 if manager == "block":
File ~/work/pandas/pandas/pandas/core/construction.py:648, in sanitize_array(data, index, dtype, copy, allow_2d)
645 subarr = np.array([], dtype=np.float64)
647 elif dtype is not None:
--> 648 subarr = _try_cast(data, dtype, copy)
650 else:
651 subarr = maybe_convert_platform(data)
File ~/work/pandas/pandas/pandas/core/construction.py:808, in _try_cast(arr, dtype, copy)
803 return lib.ensure_string_array(arr, convert_na_value=False, copy=copy).reshape(
804 shape
805 )
807 elif dtype.kind in "mM":
--> 808 return maybe_cast_to_datetime(arr, dtype)
810 # GH#15832: Check if we are requesting a numeric dtype and
811 # that we can convert the data to the requested dtype.
812 elif dtype.kind in "iu":
813 # this will raise if we have e.g. floats
File ~/work/pandas/pandas/pandas/core/dtypes/cast.py:1230, in maybe_cast_to_datetime(value, dtype)
1226 raise TypeError("value must be listlike")
1228 # TODO: _from_sequence would raise ValueError in cases where
1229 # _ensure_nanosecond_dtype raises TypeError
-> 1230 _ensure_nanosecond_dtype(dtype)
1232 if lib.is_np_dtype(dtype, "m"):
1233 res = TimedeltaArray._from_sequence(value, dtype=dtype)
File ~/work/pandas/pandas/pandas/core/dtypes/cast.py:1287, in _ensure_nanosecond_dtype(dtype)
1284 raise ValueError(msg)
1285 # TODO: ValueError or TypeError? existing test
1286 # test_constructor_generic_timestamp_bad_frequency expects TypeError
-> 1287 raise TypeError(
1288 f"dtype={dtype} is not supported. Supported resolutions are 's', "
1289 "'ms', 'us', and 'ns'"
1290 )
TypeError: dtype=datetime64[D] is not supported. Supported resolutions are 's', 'ms', 'us', and 'ns'
Улучшена скорость count#
В прошлых версиях, при запуске Series.value_counts(), результат унаследовал бы
имя исходного объекта, а индекс результата был бы безымянным. Это вызвало бы
путаницу при сбросе индекса, и имена столбцов не соответствовали бы
значениям столбцов.
Теперь имя результата будет 'count' (или 'proportion' if normalize=True был передан),
и индекс будет назван в соответствии с исходным объектом (GH 49497).
Предыдущее поведение:
In [8]: pd.Series(['quetzal', 'quetzal', 'elk'], name='animal').value_counts()
Out[2]:
quetzal 2
elk 1
Name: animal, dtype: int64
Новое поведение:
In [27]: pd.Series(['quetzal', 'quetzal', 'elk'], name='animal').value_counts()
Out[27]:
animal
quetzal 2
elk 1
Name: count, dtype: int64
Аналогично для других value_counts методы (например, DataFrame.value_counts()).
Запретить преобразование astype в неподдерживаемые типы данных datetime64/timedelta64#
В предыдущих версиях преобразование Series или DataFrame
из datetime64[ns] в другой datetime64[X] dtype вернёт
с datetime64[ns] dtype вместо запрошенного dtype. В pandas 2.0 добавлена поддержка dtypes "datetime64[s]", "datetime64[ms]" и "datetime64[us]", поэтому преобразование в эти dtypes дает точно запрошенный dtype:
Предыдущее поведение:
In [28]: idx = pd.date_range("2016-01-01", periods=3)
In [29]: ser = pd.Series(idx)
Предыдущее поведение:
In [4]: ser.astype("datetime64[s]")
Out[4]:
0 2016-01-01
1 2016-01-02
2 2016-01-03
dtype: datetime64[ns]
С новым поведением мы получаем точно запрошенный dtype:
Новое поведение:
In [30]: ser.astype("datetime64[s]")
Out[30]:
0 2016-01-01
1 2016-01-02
2 2016-01-03
dtype: datetime64[s]
Для неподдерживаемых разрешений, например "datetime64[D]", мы вызываем исключение вместо тихого игнорирования запрошенного dtype:
Новое поведение:
In [31]: ser.astype("datetime64[D]")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[31], line 1
----> 1 ser.astype("datetime64[D]")
File ~/work/pandas/pandas/pandas/core/generic.py:6665, in NDFrame.astype(self, dtype, copy, errors)
6659 results = [
6660 ser.astype(dtype, copy=copy, errors=errors) for _, ser in self.items()
6661 ]
6663 else:
6664 # else, only a single dtype is given
-> 6665 new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
6666 res = self._constructor_from_mgr(new_data, axes=new_data.axes)
6667 return res.__finalize__(self, method="astype")
File ~/work/pandas/pandas/pandas/core/internals/managers.py:449, in BaseBlockManager.astype(self, dtype, copy, errors)
446 elif using_copy_on_write():
447 copy = False
--> 449 return self.apply(
450 "astype",
451 dtype=dtype,
452 copy=copy,
453 errors=errors,
454 using_cow=using_copy_on_write(),
455 )
File ~/work/pandas/pandas/pandas/core/internals/managers.py:363, in BaseBlockManager.apply(self, f, align_keys, **kwargs)
361 applied = b.apply(f, **kwargs)
362 else:
--> 363 applied = getattr(b, f)(**kwargs)
364 result_blocks = extend_blocks(applied, result_blocks)
366 out = type(self).from_blocks(result_blocks, self.axes)
File ~/work/pandas/pandas/pandas/core/internals/blocks.py:784, in Block.astype(self, dtype, copy, errors, using_cow, squeeze)
781 raise ValueError("Can not squeeze with more than one column.")
782 values = values[0, :] # type: ignore[call-overload]
--> 784 new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
786 new_values = maybe_coerce_values(new_values)
788 refs = None
File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:237, in astype_array_safe(values, dtype, copy, errors)
234 dtype = dtype.numpy_dtype
236 try:
--> 237 new_values = astype_array(values, dtype, copy=copy)
238 except (ValueError, TypeError):
239 # e.g. _astype_nansafe can fail on object-dtype of strings
240 # trying to convert to float
241 if errors == "ignore":
File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:179, in astype_array(values, dtype, copy)
175 return values
177 if not isinstance(values, np.ndarray):
178 # i.e. ExtensionArray
--> 179 values = values.astype(dtype, copy=copy)
181 else:
182 values = _astype_nansafe(values, dtype, copy=copy)
File ~/work/pandas/pandas/pandas/core/arrays/datetimes.py:741, in DatetimeArray.astype(self, dtype, copy)
739 elif isinstance(dtype, PeriodDtype):
740 return self.to_period(freq=dtype.freq)
--> 741 return dtl.DatetimeLikeArrayMixin.astype(self, dtype, copy)
File ~/work/pandas/pandas/pandas/core/arrays/datetimelike.py:517, in DatetimeLikeArrayMixin.astype(self, dtype, copy)
513 elif (dtype.kind in "mM" and self.dtype != dtype) or dtype.kind == "f":
514 # disallow conversion between datetime/timedelta,
515 # and conversions for any datetimelike to float
516 msg = f"Cannot cast {type(self).__name__} to dtype {dtype}"
--> 517 raise TypeError(msg)
518 else:
519 return np.asarray(self, dtype=dtype)
TypeError: Cannot cast DatetimeArray to dtype datetime64[D]
Для преобразования из timedelta64[ns] типы данных, старое поведение преобразовывало
в формат с плавающей точкой.
Предыдущее поведение:
In [32]: idx = pd.timedelta_range("1 Day", periods=3)
In [33]: ser = pd.Series(idx)
Предыдущее поведение:
In [7]: ser.astype("timedelta64[s]")
Out[7]:
0 86400.0
1 172800.0
2 259200.0
dtype: float64
In [8]: ser.astype("timedelta64[D]")
Out[8]:
0 1.0
1 2.0
2 3.0
dtype: float64
Новое поведение, как и для datetime64, либо дает точно запрошенный тип данных, либо вызывает исключение:
Новое поведение:
In [34]: ser.astype("timedelta64[s]")
Out[34]:
0 1 days
1 2 days
2 3 days
dtype: timedelta64[s]
In [35]: ser.astype("timedelta64[D]")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[35], line 1
----> 1 ser.astype("timedelta64[D]")
File ~/work/pandas/pandas/pandas/core/generic.py:6665, in NDFrame.astype(self, dtype, copy, errors)
6659 results = [
6660 ser.astype(dtype, copy=copy, errors=errors) for _, ser in self.items()
6661 ]
6663 else:
6664 # else, only a single dtype is given
-> 6665 new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
6666 res = self._constructor_from_mgr(new_data, axes=new_data.axes)
6667 return res.__finalize__(self, method="astype")
File ~/work/pandas/pandas/pandas/core/internals/managers.py:449, in BaseBlockManager.astype(self, dtype, copy, errors)
446 elif using_copy_on_write():
447 copy = False
--> 449 return self.apply(
450 "astype",
451 dtype=dtype,
452 copy=copy,
453 errors=errors,
454 using_cow=using_copy_on_write(),
455 )
File ~/work/pandas/pandas/pandas/core/internals/managers.py:363, in BaseBlockManager.apply(self, f, align_keys, **kwargs)
361 applied = b.apply(f, **kwargs)
362 else:
--> 363 applied = getattr(b, f)(**kwargs)
364 result_blocks = extend_blocks(applied, result_blocks)
366 out = type(self).from_blocks(result_blocks, self.axes)
File ~/work/pandas/pandas/pandas/core/internals/blocks.py:784, in Block.astype(self, dtype, copy, errors, using_cow, squeeze)
781 raise ValueError("Can not squeeze with more than one column.")
782 values = values[0, :] # type: ignore[call-overload]
--> 784 new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
786 new_values = maybe_coerce_values(new_values)
788 refs = None
File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:237, in astype_array_safe(values, dtype, copy, errors)
234 dtype = dtype.numpy_dtype
236 try:
--> 237 new_values = astype_array(values, dtype, copy=copy)
238 except (ValueError, TypeError):
239 # e.g. _astype_nansafe can fail on object-dtype of strings
240 # trying to convert to float
241 if errors == "ignore":
File ~/work/pandas/pandas/pandas/core/dtypes/astype.py:179, in astype_array(values, dtype, copy)
175 return values
177 if not isinstance(values, np.ndarray):
178 # i.e. ExtensionArray
--> 179 values = values.astype(dtype, copy=copy)
181 else:
182 values = _astype_nansafe(values, dtype, copy=copy)
File ~/work/pandas/pandas/pandas/core/arrays/timedeltas.py:358, in TimedeltaArray.astype(self, dtype, copy)
354 return type(self)._simple_new(
355 res_values, dtype=res_values.dtype, freq=self.freq
356 )
357 else:
--> 358 raise ValueError(
359 f"Cannot convert from {self.dtype} to {dtype}. "
360 "Supported resolutions are 's', 'ms', 'us', 'ns'"
361 )
363 return dtl.DatetimeLikeArrayMixin.astype(self, dtype, copy=copy)
ValueError: Cannot convert from timedelta64[ns] to timedelta64[D]. Supported resolutions are 's', 'ms', 'us', 'ns'
UTC и временные зоны с фиксированным смещением по умолчанию используют объекты tzinfo из стандартной библиотеки#
В предыдущих версиях значение по умолчанию tzinfo объект, используемый для представления UTC
был pytz.UTC. В pandas 2.0 по умолчанию используется datetime.timezone.utc вместо.
Аналогично, для часовых поясов, представляющих фиксированные смещения UTC, мы используем datetime.timezone
объекты вместо pytz.FixedOffset объектов. См. (GH 34916)
Предыдущее поведение:
In [2]: ts = pd.Timestamp("2016-01-01", tz="UTC")
In [3]: type(ts.tzinfo)
Out[3]: pytz.UTC
In [4]: ts2 = pd.Timestamp("2016-01-01 04:05:06-07:00")
In [3]: type(ts2.tzinfo)
Out[5]: pytz._FixedOffset
Новое поведение:
In [36]: ts = pd.Timestamp("2016-01-01", tz="UTC")
In [37]: type(ts.tzinfo)
Out[37]: datetime.timezone
In [38]: ts2 = pd.Timestamp("2016-01-01 04:05:06-07:00")
In [39]: type(ts2.tzinfo)
Out[39]: datetime.timezone
Для часовых поясов, которые не являются ни UTC, ни фиксированными смещениями, например, "US/Pacific", мы по-прежнему по умолчанию используем pytz объекты.
Пустые DataFrame/Series теперь по умолчанию будут иметь RangeIndex#
Ранее, создание пустого (где data является None или пустой аргумент, подобный списку) Series или DataFrame без указания осей (index=None, columns=None) вернет оси пустыми Index с типом данных object.
Теперь оси возвращают пустой RangeIndex (GH 49572).
Предыдущее поведение:
In [8]: pd.Series().index
Out[8]:
Index([], dtype='object')
In [9] pd.DataFrame().axes
Out[9]:
[Index([], dtype='object'), Index([], dtype='object')]
Новое поведение:
In [40]: pd.Series().index
Out[40]: RangeIndex(start=0, stop=0, step=1)
In [41]: pd.DataFrame().axes
Out[41]: [RangeIndex(start=0, stop=0, step=1), RangeIndex(start=0, stop=0, step=1)]
DataFrame в LaTeX имеет новый механизм рендеринга#
Существующий DataFrame.to_latex() была переструктурирована для использования
расширенной реализации, ранее доступной под Styler.to_latex().
Сигнатура аргументов схожа, хотя col_space был удален, так как
игнорируется движками LaTeX. Этот движок рендеринга также требует jinja2 как зависимость, которую необходимо установить, поскольку рендеринг основан на шаблонах jinja2.
Следующие опции pandas для LaTeX больше не используются и были удалены. Общие аргументы max rows и columns остаются, но для этой функциональности должны быть заменены эквивалентами Styler. Альтернативные опции, дающие аналогичную функциональность, указаны ниже:
display.latex.escape: заменено наstyler.format.escape,display.latex.longtable: заменено наstyler.latex.environment,display.latex.multicolumn,display.latex.multicolumn_formatиdisplay.latex.multirow: заменено наstyler.sparse.rows,styler.sparse.columns,styler.latex.multirow_alignиstyler.latex.multicol_align,display.latex.repr: заменено наstyler.render.repr,display.max_rowsиdisplay.max_columns: заменить наstyler.render.max_rows,styler.render.max_columnsиstyler.render.max_elements.
Обратите внимание, что из-за этого изменения некоторые значения по умолчанию также изменились:
multirowтеперь по умолчанию True.multirow_alignпо умолчанию “r” вместо “l”.multicol_alignпо умолчанию “r” вместо “l”.escapeтеперь по умолчанию False.
Обратите внимание, что поведение _repr_latex_ также изменено. Ранее установка display.latex.repr генерировал LaTeX только при использовании nbconvert для
JupyterNotebook, а не когда пользователь запускает блокнот. Теперь
styler.render.repr параметр позволяет контролировать конкретный вывод
в JupyterNotebooks для операций (не только для nbconvert). См. GH 39911.
Повышенные минимальные версии для зависимостей#
Некоторые минимальные поддерживаемые версии зависимостей были обновлены. Если установлены, теперь требуются:
Пакет |
Минимальная версия |
Обязательно |
Изменено |
|---|---|---|---|
mypy (dev) |
1.0 |
X |
|
pytest (разработка) |
7.0.0 |
X |
|
pytest-xdist (dev) |
2.2.0 |
X |
|
гипотеза (разработка) |
6.34.2 |
X |
|
python-dateutil |
2.8.2 |
X |
X |
tzdata |
2022.1 |
X |
X |
Для дополнительные библиотеки общая рекомендация — использовать последнюю версию. Следующая таблица перечисляет минимальную версию для каждой библиотеки, которая в настоящее время тестируется в ходе разработки pandas. Опциональные библиотеки ниже минимальной тестируемой версии могут всё ещё работать, но не считаются поддерживаемыми.
Пакет |
Минимальная версия |
Изменено |
|---|---|---|
pyarrow |
7.0.0 |
X |
matplotlib |
3.6.1 |
X |
fastparquet |
0.6.3 |
X |
xarray |
0.21.0 |
X |
См. Зависимости и Необязательные зависимости подробнее.
Дата и время теперь парсятся с согласованным форматом#
В прошлом, to_datetime() угадывал формат для каждого элемента независимо. Это было уместно в некоторых случаях, когда элементы имели смешанные форматы дат - однако это регулярно вызывало проблемы, когда пользователи ожидали единообразного формата, но функция переключала форматы между элементами. Начиная с версии 2.0.0, разбор будет использовать единообразный формат, определяемый первым не-NA значением (если пользователь не указал формат, в этом случае используется указанный).
Старое поведение:
In [1]: ser = pd.Series(['13-01-2000', '12-01-2000'])
In [2]: pd.to_datetime(ser)
Out[2]:
0 2000-01-13
1 2000-12-01
dtype: datetime64[ns]
Новое поведение:
In [42]: ser = pd.Series(['13-01-2000', '12-01-2000'])
In [43]: pd.to_datetime(ser)
Out[43]:
0 2000-01-13
1 2000-01-12
dtype: datetime64[ns]
Обратите внимание, что это влияет на read_csv() также.
Если вам всё ещё нужно анализировать даты с несовместимыми форматами, вы можете использовать
format='mixed' (возможно, вместе с dayfirst)
ser = pd.Series(['13-01-2000', '12 January 2000'])
pd.to_datetime(ser, format='mixed', dayfirst=True)
или, если все ваши форматы соответствуют ISO8601 (но возможно не одинаково отформатированы)
ser = pd.Series(['2020-01-01', '2020-01-01 03:00'])
pd.to_datetime(ser, format='ISO8601')
Другие изменения API#
The
freq,tz,nanosecond, иunitключевые слова вTimestampконструктор теперь принимает только ключевые слова (GH 45307, GH 32526)Передача
nanosecondsбольше 999 или меньше 0 вTimestampтеперь вызываетValueError(GH 48538, GH 48255)read_csv(): указание неверного количества столбцов сindex_colтеперь вызываетParserErrorвместоIndexErrorпри использовании парсера c.Значение по умолчанию для
dtypeвget_dummies()изменено наboolизuint8(GH 45848)DataFrame.astype(),Series.astype(), иDatetimeIndex.astype()приведение данных datetime64 к любому из “datetime64[s]”, “datetime64[ms]”, “datetime64[us]” вернет объект с заданным разрешением вместо приведения обратно к “datetime64[ns]” (GH 48928)DataFrame.astype(),Series.astype(), иDatetimeIndex.astype()приведение данных timedelta64 к любому из "timedelta64[s]", "timedelta64[ms]", "timedelta64[us]" вернёт объект с заданным разрешением вместо приведения к типу "float64" (GH 48963)DatetimeIndex.astype(),TimedeltaIndex.astype(),PeriodIndex.astype()Series.astype(),DataFrame.astype()сdatetime64,timedelta64илиPeriodDtypeтипы данных больше не позволяют преобразовывать в целочисленные типы данных, кроме 'int64', делаютobj.astype('int64', copy=False).astype(dtype)вместо (GH 49715)Index.astype()теперь позволяет преобразование изfloat64dtype к datetime-подобным dtypes, соответствуяSeriesповедение (GH 49660)Передача данных с dtype "timedelta64[s]", "timedelta64[ms]" или "timedelta64[us]" в
TimedeltaIndex,Series, илиDataFrameконструкторы теперь будут сохранять этот dtype вместо приведения к «timedelta64[ns]»; данные timedelta64 с более низким разрешением будут приведены к наименьшему поддерживаемому разрешению «timedelta64[s]» (GH 49014)Передача
dtypeиз "timedelta64[s]", "timedelta64[ms]", или "timedelta64[us]" вTimedeltaIndex,Series, илиDataFrameконструкторы теперь будут сохранять этот тип данных вместо приведения к “timedelta64[ns]”; передача типа данных с более низким разрешением дляSeriesилиDataFrameбудет приведено к наименьшему поддерживаемому разрешению "timedelta64[s]" (GH 49014)Передача
np.datetime64объект с разрешением не в наносекундах вTimestampсохранит исходное разрешение, если оно "s", "ms", "us" или "ns"; в противном случае будет приведено к ближайшему поддерживаемому разрешению (GH 49008)Передача
datetime64значения с разрешением, отличным от наносекунд, вto_datetime()сохранит исходное разрешение, если оно "s", "ms", "us" или "ns"; в противном случае будет приведено к ближайшему поддерживаемому разрешению (GH 50369)Передача целочисленных значений и типа данных datetime64 не в наносекундах (например, “datetime64[s]”)
DataFrame,Series, илиIndexбудет рассматривать значения как кратные единице типа данных, соответствуя поведению, например,Series(np.array(values, dtype="M8[s]"))(GH 51092)Передача строки в формате ISO-8601 в
Timestampсохранит разрешение разобранного ввода, если оно “s”, “ms”, “us” или “ns”; в противном случае оно будет приведено к ближайшему поддерживаемому разрешению (GH 49737)The
otherаргумент вDataFrame.mask()иSeries.mask()теперь по умолчаниюno_defaultвместоnp.nanсогласовано сDataFrame.where()иSeries.where(). Записи будут заполнены соответствующим значением NULL (np.nanдля типов данных numpy,pd.NAдля типов данных расширений). (GH 49111)Изменено поведение
Series.quantile()иDataFrame.quantile()сSparseDtypeдля сохранения разреженного типа данных (GH 49583)При создании
Seriesс объектным типом данныхIndexобъектов datetime, pandas больше не преобразует индекс вDatetimeIndex(GH 39307, GH 23598)pandas.testing.assert_index_equal()с параметромexact="equiv"теперь считает два индекса равными, когда оба являются либоRangeIndexилиIndexсint64dtype. Ранее это означало либоRangeIndexилиInt64Index(GH 51098)Series.unique()с типом данных "timedelta64[ns]" или "datetime64[ns]" теперь возвращаетTimedeltaArrayилиDatetimeArrayвместоnumpy.ndarray(GH 49176)to_datetime()иDatetimeIndexтеперь разрешают последовательности, содержащие какdatetimeобъекты и числовые записи, сопоставлениеSeriesповедение (GH 49037, GH 50453)pandas.api.types.is_string_dtype()теперь возвращает толькоTrueдля массивоподобных объектов сdtype=objectкогда элементы выводятся как строки (GH 15585)Передача последовательности, содержащей
datetimeобъекты иdateобъекты вSeriesконструктор вернёт сobjectdtype вместоdatetime64[ns]dtype, согласованный сIndexповедение (GH 49341)Передача строк, которые не могут быть преобразованы в дату/время в
SeriesилиDataFrameсdtype="datetime64[ns]"будет вызывать исключение вместо молчаливого игнорирования ключевого слова и возвратаobjectтип данных (GH 24435)Передача последовательности, содержащей тип, который не может быть преобразован в
Timedeltatoto_timedelta()или кSeriesилиDataFrameконструктор сdtype="timedelta64[ns]"или дляTimedeltaIndexтеперь вызываетTypeErrorвместоValueError(GH 49525)Изменено поведение
Indexконструктор с последовательностью, содержащей хотя бы одинNaTподобное списку или None, по умолчанию NoneNoneилиNaNдля определенияdatetime64[ns]dtype вместоobject, соответствуяSeriesповедение (GH 49340)read_stata()с параметромindex_colустановлено вNone(по умолчанию) теперь будет устанавливать индекс на возвращаемомDataFrameвRangeIndexвместоInt64Index(GH 49745)Изменено поведение
Index,Series, иDataFrameарифметические методы при работе с объектными типами данных, результаты больше не выполняют вывод типа для результата операций с массивами, используйтеresult.infer_objects(copy=False)для вывода типа результата (GH 49999, GH 49714)Изменено поведение
Indexконструктор с типом данных objectnumpy.ndarrayсодержащий все-boolзначения или все комплексные значения, теперь это будет сохранять тип object, в соответствии сSeriesповедение (GH 49594)Изменено поведение
Series.astype()из содержащего тип objectbytesобъекты в строковые типы данных; теперь это делаетval.decode()на объектах bytes вместоstr(val), соответствуяIndex.astype()поведение (GH 45326)Добавлен
"None"по умолчаниюna_valuesвread_csv()(GH 50286)Изменено поведение
SeriesиDataFrameконструкторов при передаче целочисленного типа данных и данных с плавающей точкой, которые не являются круглыми числами, теперь вызываетValueErrorвместо молчаливого сохранения типа float; сделатьSeries(data)илиDataFrame(data)чтобы получить старое поведение, иSeries(data).astype(dtype)илиDataFrame(data).astype(dtype)для получения указанного типа данных (GH 49599)Изменено поведение
DataFrame.shift()сaxis=1, целое числоfill_value, и однородный datetime-подобный dtype, теперь заполняет новые столбцы целочисленными dtypes вместо приведения к datetimelike (GH 49842)Файлы теперь закрываются при возникновении исключения в
read_json()(GH 49921)Изменено поведение
read_csv(),read_json()&read_fwf(), где индекс теперь всегда будетRangeIndex, когда индекс не указан. Ранее индекс был быIndexс типом данныхobjectесли новый DataFrame/Series имеет длину 0 (GH 49572)DataFrame.values(),DataFrame.to_numpy(),DataFrame.xs(),DataFrame.reindex(),DataFrame.fillna(), иDataFrame.replace()больше не объединяет базовые массивы без уведомления; выполнятьdf = df.copy()для обеспечения консолидации (GH 49356)Создание нового DataFrame с использованием полного среза по обеим осям с
locилиiloc(таким образом,df.loc[:, :]илиdf.iloc[:, :]) теперь возвращает новый DataFrame (поверхностную копию) вместо исходного DataFrame, что согласуется с другими методами получения полного среза (напримерdf.loc[:]илиdf[:]) (GH 49469)The
SeriesиDataFrameконструкторы теперь будут возвращать поверхностную копию (т.е. делиться данными, но не атрибутами) при передаче Series и DataFrame, соответственно, и с настройкой по умолчаниюcopy=False(и если никакой другой ключевой аргумент не вызывает копирование). Ранее новая Series или DataFrame делила бы атрибут индекса (например,df.index = ...также обновит индекс родительского или дочернего элемента) (GH 49523)Запретить вычисление
cumprodдляTimedeltaobject; ранее это возвращало некорректные значения (GH 50246)DataFrameобъекты, прочитанные изHDFStoreфайл без индекса теперь имеетRangeIndexвместоint64индекс (был выбран как)Создание экземпляра
Indexс числовым numpy dtype с данными, содержащимиNAи/илиNaTтеперь вызываетValueError. РанееTypeErrorбыл поднят (GH 51050)Загрузка JSON-файла с дублирующимися столбцами с помощью
read_json(orient='split')переименовывает столбцы, чтобы избежать дубликатов, какread_csv()и другие ридеры делают (GH 50370)Уровни индекса
Seriesвозвращен изSeries.sparse.from_cooтеперь всегда имеют тип данныхint32. Ранее они имели тип данныхint64(GH 50926)to_datetime()сunitлюбого из значений "Y" или "M" теперь вызовет ошибку, если последовательность содержит неокруглённоеfloatзначение, соответствующееTimestampповедение (GH 50301)Методы
Series.round(),DataFrame.__invert__(),Series.__invert__(),DataFrame.swapaxes(),DataFrame.first(),DataFrame.last(),Series.first(),Series.last()иDataFrame.align()теперь всегда будет возвращать новые объекты (GH 51032)DataFrameиDataFrameGroupByагрегации (например, «sum») со столбцами типа object больше не выводят не-object типы для своих результатов, явно вызовитеresult.infer_objects(copy=False)на результат, чтобы получить старое поведение (GH 51205, GH 49603)Деление на ноль с
ArrowDtypedtypes возвращает-inf,nan, илиinfв зависимости от числителя, вместо вызова исключения (GH 51541)Добавлен
pandas.api.types.is_any_real_numeric_dtype()для проверки реальных числовых типов данных (GH 51152)value_counts()теперь возвращает данные сArrowDtypeсpyarrow.int64тип вместо"Int64"тип (GH 51462)factorize()иunique()сохранить исходный dtype при передаче numpy timedelta64 или datetime64 с разрешением не в наносекундах (GH 48670)
Примечание
Текущий PDEP предлагает устаревание и удаление ключевых слов inplace и copy
для всех, кроме небольшого подмножества методов из API pandas. Текущее обсуждение происходит
на здесь. Ключевые слова больше не будут необходимы
в контексте Copy-on-Write. Если это предложение будет принято, оба
ключевых слова будут устаревшими в следующем выпуске pandas и удалены в pandas 3.0.
Устаревшие функции#
Устаревший парсинг строк даты и времени с системным локальным часовым поясом для
tzlocal, передайтеtzключевое слово или явно вызватьtz_localizeвместо (GH 50791)Устаревший аргумент
infer_datetime_formatвto_datetime()иread_csv(), так как его строгая версия теперь используется по умолчанию (GH 48621)Устаревшее поведение
to_datetime()сunitпри разборе строк, в будущей версии они будут разбираться как даты и время (соответствуя поведению без единиц измерения) вместо приведения к числам с плавающей точкой. Чтобы сохранить старое поведение, приведите строки к числовым типам перед вызовомto_datetime()(GH 50735)Устаревший
pandas.io.sql.execute()(GH 50185)Index.is_boolean()был объявлен устаревшим. Используйтеpandas.api.types.is_bool_dtype()вместо (GH 50042)Index.is_integer()был объявлен устаревшим. Используйтеpandas.api.types.is_integer_dtype()вместо (GH 50042)Index.is_floating()был объявлен устаревшим. Используйтеpandas.api.types.is_float_dtype()вместо (GH 50042)Index.holds_integer()был объявлен устаревшим. Используйтеpandas.api.types.infer_dtype()вместо (GH 50243)Index.is_numeric()был объявлен устаревшим. Используйтеpandas.api.types.is_any_real_numeric_dtype()вместо (GH 50042,:issue:51152)Index.is_categorical()был объявлен устаревшим. Используйтеpandas.api.types.is_categorical_dtype()вместо (GH 50042)Index.is_object()был объявлен устаревшим. Используйтеpandas.api.types.is_object_dtype()вместо (GH 50042)Index.is_interval()был объявлен устаревшим. Используйтеpandas.api.types.is_interval_dtype()вместо (GH 50042)Устаревший аргумент
date_parserвread_csv(),read_table(),read_fwf(), иread_excel()в пользуdate_format(GH 50601)Устаревший
allиanyредукции сdatetime64иDatetimeTZDtypeтипов данных, используйте, например,(obj != pd.Timestamp(0), tz=obj.tz).all()вместо (GH 34479)Устаревшие неиспользуемые аргументы
*argsи**kwargsвResampler(GH 50977)Устаревший вызов
floatилиintна одном элементеSeriesдля возвратаfloatилиintсоответственно. Извлеките элемент перед вызовомfloatилиintвместо (GH 51101)Устаревший
Grouper.groups(), используйтеGroupby.groups()вместо (GH 51182)Устаревший
Grouper.grouper(), используйтеGroupby.grouper()вместо (GH 51182)Устаревший
Grouper.obj(), используйтеGroupby.obj()вместо (GH 51206)Устаревший
Grouper.indexer(), используйтеResampler.indexer()вместо (GH 51206)Устаревший
Grouper.ax(), используйтеResampler.ax()вместо (GH 51206)Устаревшее ключевое слово
use_nullable_dtypesвread_parquet(), используйтеdtype_backendвместо (GH 51853)Устаревший
Series.pad()в пользуSeries.ffill()(GH 33396)Устаревший
Series.backfill()в пользуSeries.bfill()(GH 33396)Устаревший
DataFrame.pad()в пользуDataFrame.ffill()(GH 33396)Устаревший
DataFrame.backfill()в пользуDataFrame.bfill()(GH 33396)Устаревший
close(). ИспользуйтеStataReaderкак контекстный менеджер вместо (GH 49228)Устаревшее создание скаляра при итерации по
DataFrameGroupByилиSeriesGroupByкоторый был сгруппирован поlevelпараметр, который является списком длины 1; вместо этого будет возвращен кортеж длины один (GH 51583)
Удаление устаревших функций/изменений предыдущих версий#
Удалено
Int64Index,UInt64IndexиFloat64Index. См. также здесь для получения дополнительной информации (GH 42717)Удалены устаревшие
Timestamp.freq,Timestamp.freqstrи аргументfreqизTimestampконструкторе иTimestamp.fromordinal()(GH 14146)Удалены устаревшие
CategoricalBlock,Block.is_categorical(), требуют, чтобы значения datetime64 и timedelta64 были обёрнуты вDatetimeArrayилиTimedeltaArrayперед передачей вBlock.make_block_same_class(), требуютDatetimeTZBlock.valuesиметь правильный ndim при передаче вBlockManagerконструктор и удалил ключевое слово “fastpath” изSingleBlockManagerконструктор (GH 40226, GH 40571)Удалена устаревшая глобальная опция
use_inf_as_nullв пользуuse_inf_as_na(GH 17126)Удален устаревший модуль
pandas.core.index(GH 30193)Удален устаревший псевдоним
pandas.core.tools.datetimes.to_time, импортировать функцию напрямую изpandas.core.tools.timesвместо (GH 34145)Удален устаревший псевдоним
pandas.io.json.json_normalize, импортировать функцию напрямую изpandas.json_normalizeвместо (GH 27615)Удалены устаревшие
Categorical.to_dense(), используйтеnp.asarray(cat)вместо (GH 32639)Удалены устаревшие
Categorical.take_nd()(GH 27745)Удалены устаревшие
Categorical.mode(), используйтеSeries(cat).mode()вместо (GH 45033)Удалены устаревшие
Categorical.is_dtype_equal()иCategoricalIndex.is_dtype_equal()(GH 37545)Удалены устаревшие
CategoricalIndex.take_nd()(GH 30702)Удалены устаревшие
Index.is_type_compatible()(GH 42113)Удалены устаревшие
Index.is_mixed(), проверьтеindex.inferred_typeнапрямую вместо этого (GH 32922)Удалены устаревшие
pandas.api.types.is_categorical(); используйтеpandas.api.types.is_categorical_dtype()вместо этого (GH 33385)Удалены устаревшие
Index.asi8()(GH 37877)Принудительное устаревание, изменяющее поведение при передаче
datetime64[ns]dtype данных и dtype с учётом часового пояса вSeries, интерпретируя значения как локальное время вместо времени UTC, соответствуяDatetimeIndexповедение (GH 41662)Принудительное устаревание изменения поведения при применении numpy ufunc к нескольким невыровненным (по индексу или столбцам)
DataFrameкоторый теперь сначала выровняет входные данные (GH 39239)Удалены устаревшие
DataFrame._AXIS_NUMBERS(),DataFrame._AXIS_NAMES(),Series._AXIS_NUMBERS(),Series._AXIS_NAMES()(GH 33637)Удалены устаревшие
Index.to_native_types(), используйтеobj.astype(str)вместо (GH 36418)Удалены устаревшие
Series.iteritems(),DataFrame.iteritems(), используйтеobj.itemsвместо (GH 45321)Удалены устаревшие
DataFrame.lookup()(GH 35224)Удалены устаревшие
Series.append(),DataFrame.append(), используйтеconcat()вместо (GH 35407)Удалены устаревшие
Series.iteritems(),DataFrame.iteritems()иHDFStore.iteritems()использоватьobj.itemsвместо (GH 45321)Удалены устаревшие
DatetimeIndex.union_many()(GH 45018)Удалены устаревшие
weekofyearиweekатрибутыDatetimeArray,DatetimeIndexиdtаксессор в пользуisocalendar().week(GH 33595)Удалены устаревшие
RangeIndex._start(),RangeIndex._stop(),RangeIndex._step(), используйтеstart,stop,stepвместо (GH 30482)Удалены устаревшие
DatetimeIndex.to_perioddelta(), Используйтеdtindex - dtindex.to_period(freq).to_timestamp()вместо (GH 34853)Удалены устаревшие
Styler.hide_index()иStyler.hide_columns()(GH 49397)Удалены устаревшие
Styler.set_na_rep()иStyler.set_precision()(GH 49397)Удалены устаревшие
Styler.where()(GH 49397)Удалены устаревшие
Styler.render()(GH 49397)Удален устаревший аргумент
col_spaceвDataFrame.to_latex()(GH 47970)Удален устаревший аргумент
null_colorвStyler.highlight_null()(GH 49397)Удален устаревший аргумент
check_less_preciseвtesting.assert_frame_equal(),testing.assert_extension_array_equal(),testing.assert_series_equal(),testing.assert_index_equal()(GH 30562)Удалены устаревшие
null_countsаргумент вDataFrame.info(). Используйтеshow_countsвместо (GH 37999)Удалены устаревшие
Index.is_monotonic(), иSeries.is_monotonic(); используйтеobj.is_monotonic_increasingвместо (GH 45422)Удалены устаревшие
Index.is_all_dates()(GH 36697)Принудительное устаревание, запрещающее передачу данных с учетом часового пояса
Timestampиdtype="datetime64[ns]"toSeriesилиDataFrameконструкторы (GH 41555)Принудительное устаревание, запрещающее передачу последовательности значений с информацией о часовом поясе и
dtype="datetime64[ns]"вSeriesилиDataFrameконструкторы (GH 41555)Принудительное устаревание, запрещающее
numpy.ma.mrecords.MaskedRecordsвDataFrameконструктор; передайте"{name: data[name] for name in data.dtype.names}вместо (GH 40363)Принудительное устаревание, запрещающее тип данных “datetime64” без единиц измерения в
Series.astype()иDataFrame.astype()(GH 47844)Принудительное устаревание, запрещающее использование
.astypeпреобразоватьdatetime64[ns]Series,DataFrame, илиDatetimeIndexв тип данных с учетом часового пояса, используйтеobj.tz_localizeилиser.dt.tz_localizeвместо (GH 39258)Принудительное устаревание, запрещающее использование
.astypeдля преобразования часового пояса с учётомSeries,DataFrame, илиDatetimeIndexв не зависящее от часового поясаdatetime64[ns]тип данных, используйтеobj.tz_localize(None)илиobj.tz_convert("UTC").tz_localize(None)вместо (GH 39258)Принудительное устаревание, запрещающее передачу небулевого аргумента в sort в
concat()(GH 44629)Удалены функции парсера дат
parse_date_time(),parse_date_fields(),parse_all_fields()иgeneric_parser()(GH 24518)Удаленный аргумент
indexизcore.arrays.SparseArrayконструктор (GH 43523)Удалить аргумент
squeezeизDataFrame.groupby()иSeries.groupby()(GH 32380)Удалены устаревшие
apply,apply_index,__call__,onOffset, иisAnchoredатрибуты изDateOffset(GH 34171)Удалено
keep_tzаргумент вDatetimeIndex.to_series()(GH 29731)Удалить аргументы
namesиdtypeизIndex.copy()иlevelsиcodesизMultiIndex.copy()(GH 35853, GH 36685)Удалить аргумент
inplaceизMultiIndex.set_levels()иMultiIndex.set_codes()(GH 35626)Удалённые аргументы
verboseиencodingизDataFrame.to_excel()иSeries.to_excel()(GH 47912)Удаленный аргумент
line_terminatorизDataFrame.to_csv()иSeries.to_csv(), используйтеlineterminatorвместо (GH 45302)Удаленный аргумент
inplaceизDataFrame.set_axis()иSeries.set_axis(), используйтеobj = obj.set_axis(..., copy=False)вместо (GH 48130)Запретить передачу позиционных аргументов в
MultiIndex.set_levels()иMultiIndex.set_codes()(GH 41485)Запретить парсинг строк Timedelta с компонентами с единицами "Y", "y" или "M", так как они не представляют однозначные длительности (GH 36838)
Удалено
MultiIndex.is_lexsorted()иMultiIndex.lexsort_depth()(GH 38701)Удаленный аргумент
howизPeriodIndex.astype(), используйтеPeriodIndex.to_timestamp()вместо (GH 37982)Удаленный аргумент
try_castизDataFrame.mask(),DataFrame.where(),Series.mask()иSeries.where()(GH 38836)Удаленный аргумент
tzизPeriod.to_timestamp(), используйтеobj.to_timestamp(...).tz_localize(tz)вместо (GH 34522)Удаленный аргумент
sort_columnsвDataFrame.plot()иSeries.plot()(GH 47563)Удаленный аргумент
is_copyизDataFrame.take()иSeries.take()(GH 30615)Удаленный аргумент
kindизIndex.get_slice_bound(),Index.slice_indexer()иIndex.slice_locs()(GH 41378)Удалённые аргументы
prefix,squeeze,error_bad_linesиwarn_bad_linesизread_csv()(GH 40413, GH 43427)Удалённые аргументы
squeezeизread_excel()(GH 43427)Удаленный аргумент
datetime_is_numericизDataFrame.describe()иSeries.describe()как данные даты и времени всегда будут суммироваться как числовые данные (GH 34798)Запретить передачу списка
keytoSeries.xs()иDataFrame.xs(), передайте кортеж вместо (GH 41789)Запрет специфичных для подкласса ключевых слов (например, “freq”, “tz”, “names”, “closed”) в
Indexконструктор (GH 38597)Удаленный аргумент
inplaceизCategorical.remove_unused_categories()(GH 37918)Запрет передачи нецелых чисел с плавающей точкой в
Timestampсunit="M"илиunit="Y"(GH 47266)Удалить ключевые слова
convert_floatиmangle_dupe_colsизread_excel()(GH 41176)Удалить ключевое слово
mangle_dupe_colsизread_csv()иread_table()(GH 48137)Удалено
errorsключевое слово изDataFrame.where(),Series.where(),DataFrame.mask()иSeries.mask()(GH 47728)Запретить передачу неключевых аргументов в
read_excel()кромеioиsheet_name(GH 34418)Запретить передачу неключевых аргументов в
DataFrame.drop()иSeries.drop()кромеlabels(GH 41486)Запретить передачу неключевых аргументов в
DataFrame.fillna()иSeries.fillna()кромеvalue(GH 41485)Запретить передачу неключевых аргументов в
StringMethods.split()иStringMethods.rsplit()за исключениемpat(GH 47448)Запретить передачу неключевых аргументов в
DataFrame.set_index()кромеkeys(GH 41495)Запретить передачу неключевых аргументов в
Resampler.interpolate()кромеmethod(GH 41699)Запретить передачу неключевых аргументов в
DataFrame.reset_index()иSeries.reset_index()кромеlevel(GH 41496)Запретить передачу неключевых аргументов в
DataFrame.dropna()иSeries.dropna()(GH 41504)Запретить передачу неключевых аргументов в
ExtensionArray.argsort()(GH 46134)Запретить передачу неключевых аргументов в
Categorical.sort_values()(GH 47618)Запретить передачу неключевых аргументов в
Index.drop_duplicates()иSeries.drop_duplicates()(GH 41485)Запретить передачу неключевых аргументов в
DataFrame.drop_duplicates()за исключениемsubset(GH 41485)Запретить передачу неключевых аргументов в
DataFrame.sort_index()иSeries.sort_index()(GH 41506)Запретить передачу неключевых аргументов в
DataFrame.interpolate()иSeries.interpolate()за исключениемmethod(GH 41510)Запретить передачу неключевых аргументов в
DataFrame.any()иSeries.any()(GH 44896)Запретить передачу неключевых аргументов в
Index.set_names()за исключениемnames(GH 41551)Запретить передачу неключевых аргументов в
Index.join()за исключениемother(GH 46518)Запретить передачу неключевых аргументов в
concat()за исключениемobjs(GH 41485)Запретить передачу неключевых аргументов в
pivot()за исключениемdata(GH 48301)Запретить передачу неключевых аргументов в
DataFrame.pivot()(GH 48301)Запретить передачу неключевых аргументов в
read_html()за исключениемio(GH 27573)Запретить передачу неключевых аргументов в
read_json()за исключениемpath_or_buf(GH 27573)Запретить передачу неключевых аргументов в
read_sas()за исключениемfilepath_or_buffer(GH 47154)Запретить передачу неключевых аргументов в
read_stata()за исключениемfilepath_or_buffer(GH 48128)Запретить передачу неключевых аргументов в
read_csv()кромеfilepath_or_buffer(GH 41485)Запретить передачу неключевых аргументов в
read_table()кромеfilepath_or_buffer(GH 41485)Запретить передачу неключевых аргументов в
read_fwf()кромеfilepath_or_buffer(GH 44710)Запретить передачу неключевых аргументов в
read_xml()за исключениемpath_or_buffer(GH 45133)Запретить передачу неключевых аргументов в
Series.mask()иDataFrame.mask()кромеcondиother(GH 41580)Запретить передачу неключевых аргументов в
DataFrame.to_stata()за исключениемpath(GH 48128)Запретить передачу неключевых аргументов в
DataFrame.where()иSeries.where()за исключениемcondиother(GH 41523)Запретить передачу неключевых аргументов в
Series.set_axis()иDataFrame.set_axis()за исключениемlabels(GH 41491)Запретить передачу неключевых аргументов в
Series.rename_axis()иDataFrame.rename_axis()за исключениемmapper(GH 47587)Запретить передачу неключевых аргументов в
Series.clip()иDataFrame.clip()кромеlowerиupper(GH 41511)Запретить передачу неключевых аргументов в
Series.bfill(),Series.ffill(),DataFrame.bfill()иDataFrame.ffill()(GH 41508)Запретить передачу неключевых аргументов в
DataFrame.replace(),Series.replace()за исключениемto_replaceиvalue(GH 47587)Запретить передачу неключевых аргументов в
DataFrame.sort_values()за исключениемby(GH 41505)Запретить передачу неключевых аргументов в
Series.sort_values()(GH 41505)Запретить передачу неключевых аргументов в
DataFrame.reindex()за исключениемlabels(GH 17966)Запретить
Index.reindex()с неуникальнымиIndexобъекты (GH 42568)Запрещено создание
Categoricalсо скаляромdata(GH 38433)Запрещено создание
CategoricalIndexбез передачиdata(GH 38944)Удалено
Rolling.validate(),Expanding.validate(), иExponentialMovingWindow.validate()(GH 43665)Удалено
Rolling.win_typeвозвращая"freq"(GH 38963)Удалено
Rolling.is_datetimelike(GH 38963)Удалён
levelключевое слово вDataFrameиSeriesагрегации; используйтеgroupbyвместо (GH 39983)Удалены устаревшие
Timedelta.delta(),Timedelta.is_populated(), иTimedelta.freq(GH 46430, GH 46476)Удалены устаревшие
NaT.freq(GH 45071)Удалены устаревшие
Categorical.replace(), используйтеSeries.replace()вместо (GH 44929)Удалён
numeric_onlyключевое слово изCategorical.min()иCategorical.max()в пользуskipna(GH 48821)Изменено поведение
DataFrame.median()иDataFrame.mean()сnumeric_only=Noneчтобы не исключать столбцы, подобные дате и времени. ЭТО ПРИМЕЧАНИЕ СТАНЕТ НЕАКТУАЛЬНЫМ, КОГДАnumeric_only=NoneПРЕКРАЩЕНИЕ ИСПОЛЬЗОВАНИЯ ПРИМЕНЯЕТСЯ (GH 29941)Удалено
is_extension_type()в пользуis_extension_array_dtype()(GH 29457)Удалено
.ExponentialMovingWindow.vol(GH 39220)Удалено
Index.get_value()иIndex.set_value()(GH 33907, GH 28621)Удалено
Series.slice_shift()иDataFrame.slice_shift()(GH 37601)Удалить
DataFrameGroupBy.pad()иDataFrameGroupBy.backfill()(GH 45076)Удалить
numpyаргумент изread_json()(GH 30636)Запретить передачу сокращений для
orientвDataFrame.to_dict()(GH 32516)Запретить частичное срезывание на немонотонном
DatetimeIndexс ключами, которых нет в Index. Теперь это вызываетKeyError(GH 18531)Удалено
get_offsetв пользуto_offset()(GH 30340)Удалён
warnключевое слово вinfer_freq()(GH 45947)Удалён
include_startиinclude_endаргументы вDataFrame.between_time()в пользуinclusive(GH 43248)Удалён
closedаргумент вdate_range()иbdate_range()в пользуinclusiveаргумент (GH 40245)Удалён
centerключевое слово вDataFrame.expanding()(GH 20647)Удалён
methodиtoleranceаргументы вIndex.get_loc(). Используйтеindex.get_indexer([label], method=..., tolerance=...)вместо (GH 42269)Удалён
pandas.datetimeподмодуль (GH 30489)Удалён
pandas.npподмодуль (GH 30296)Удалено
pandas.util.testingв пользуpandas.testing(GH 30745)Удалено
Series.str.__iter__()(GH 28277)Удалено
pandas.SparseArrayв пользуarrays.SparseArray(GH 30642)Удалено
pandas.SparseSeriesиpandas.SparseDataFrame, включая поддержку pickle. (GH 30642)Запрещена передача целого числа
fill_valuetoDataFrame.shift()иSeries.shift`()с типами datetime64, timedelta64 или period (GH 32591)Запрещено использование строковой метки столбца в
timesвDataFrame.ewm()(GH 43265)Запрещена передача
TrueиFalseвinclusiveвSeries.between()в пользу"both"и"neither"соответственно (GH 40628)Запрещено использование
usecolsс индексами вне диапазона дляread_csvсengine="c"(GH 25623)Запрещено использование
**kwargsвExcelWriter; используйте аргумент ключевого словаengine_kwargsвместо (GH 40430)Запрещена передача кортежа меток столбцов в
DataFrameGroupBy.__getitem__()(GH 30546)Запрещено отсутствие меток при индексации последовательностью меток на уровне
MultiIndex. Теперь это вызываетKeyError(GH 42351)Запрещено установка значений с
.locиспользуя позиционный срез. Используйте.locс метками или.ilocс позициями вместо (GH 31840)Запрещено позиционное индексирование с
floatключ, даже если этот ключ является круглым числом, вручную преобразуйте в целое число вместо (GH 34193)Запрещено использование
DataFrameиндексатор с.iloc, используйте.locвместо автоматического выравнивания (GH 39022)Запрещено использование
setилиdictиндексаторы в__getitem__и__setitem__методы (GH 42825)Запрещено индексирование на
Indexили позиционное индексирование наSeriesсоздание многомерных объектов, например,obj[:, None], преобразуйте в numpy перед индексированием вместо (GH 35141)Запрещено использование
dictилиsetобъекты вsuffixesвmerge()(GH 34810)Запрещено использование
merge()для создания дублирующихся столбцов черезsuffixesключевое слово и уже существующие столбцы (GH 22818)Запрещено использование
merge()илиjoin()на разном количестве уровней (GH 34862)Запрещено использование
value_nameаргумент вDataFrame.melt()для сопоставления элемента вDataFrameстолбцы (GH 35003)Запрещена передача
showindexв**kwargsвDataFrame.to_markdown()иSeries.to_markdown()в пользуindex(GH 33091)Удалена возможность прямой установки Categorical._codes (GH 41429)
Удалена возможность напрямую устанавливать Categorical.categories (GH 47834)
Удаленный аргумент
inplaceизCategorical.add_categories(),Categorical.remove_categories(),Categorical.set_categories(),Categorical.rename_categories(),Categorical.reorder_categories(),Categorical.set_ordered(),Categorical.as_ordered(),Categorical.as_unordered()(GH 37981, GH 41118, GH 41133, GH 47834)Принудительно
Rolling.count()сmin_periods=Noneпо умолчанию использовать размер окна (GH 31302)Переименовано
fnametopathвDataFrame.to_parquet(),DataFrame.to_stata()иDataFrame.to_feather()(GH 30338)Запрещено индексирование
Seriesсо списком из одного элемента со срезом (например,ser[[slice(0, 2)]]). Либо преобразуйте список в кортеж, либо передайте срез напрямую вместо (GH 31333)Изменено поведение индексации на
DataFrameсDatetimeIndexиндекс с использованием строкового индексатора, ранее это работало как срез по строкам, теперь работает как любой другой ключ столбца; используйтеframe.loc[key]для старого поведения (GH 36179)Принудительно применён
display.max_colwidthопция не принимать отрицательные целые числа (GH 31569)Удалён
display.column_spaceопция в пользуdf.to_string(col_space=...)(GH 47280)Удален устаревший метод
madиз классов pandas (GH 11787)Удален устаревший метод
tshiftиз классов pandas (GH 11631)Изменено поведение при передаче пустых данных в
Series; тип данных по умолчанию будетobjectвместоfloat64(GH 29405)Изменено поведение
DatetimeIndex.union(),DatetimeIndex.intersection(), иDatetimeIndex.symmetric_difference()с несовпадающими часовыми поясами для преобразования в UTC вместо приведения к типу object (GH 39328)Изменено поведение
to_datetime()с аргументом "now" сutc=Falseдля соответствияTimestamp("now")(GH 18705)Изменено поведение индексации для объектов с учетом часового пояса
DatetimeIndexс временной зоной, не учитывающей часовой поясdatetimeобъект или наоборот; теперь они ведут себя как любой другой несравнимый тип, вызываяKeyError(GH 36148)Изменено поведение
Index.reindex(),Series.reindex(), иDataFrame.reindex()сdatetime64dtype иdatetime.dateобъект дляfill_value; они больше не считаются эквивалентнымиdatetime.datetimeобъекты, поэтому reindex приводит к типу данных object (GH 39767)Изменено поведение
SparseArray.astype()при указании типа данных, который не является явноSparseDtype, преобразовать в точно запрошенный dtype, а не молча использоватьSparseDtypeвместо (GH 34457)Изменено поведение
Index.ravel()для возврата представления на исходномIndexвместоnp.ndarray(GH 36900)Изменено поведение
Series.to_frame()иIndex.to_frame()Мохаммад Ахмади +name=NoneиспользоватьNoneдля имени столбца вместо имени индекса или значения по умолчанию0(GH 45523)Изменено поведение
concat()с одним массивомbool-dtype и другой целочисленного типа, теперь возвращаетobjectdtype вместо целочисленного dtype; явно преобразуйте объект bool в целое число перед объединением, чтобы получить старое поведение (GH 45101)Изменено поведение
DataFrameконструктору с плавающей точкойdataи целое числоdtype, когда данные не могут быть преобразованы без потерь, сохраняется тип данных с плавающей точкой, что соответствуетSeriesповедение (GH 41170)Изменено поведение
Indexконструктор при передачеnp.ndarrayс объектным типом данных, содержащим числовые записи; теперь сохраняется объектный тип данных вместо вывода числового типа данных, в соответствии сSeriesповедение (GH 42870)Изменено поведение
Index.__and__(),Index.__or__()иIndex.__xor__()вести себя как логические операции (соответствиеSeriesповедение) вместо псевдонимов для операций над множествами (GH 37374)Изменено поведение
DataFrameконструктор, когда передан список, первый элемент которого являетсяCategorical, теперь это обрабатывает элементы как строки, приводя кobjectdtype, согласованный с поведением для других типов (GH 38845)Изменено поведение
DataFrameконструктору при передачеdtype(кроме int), к которому данные не могут быть приведены; теперь возникает исключение вместо тихого игнорирования типа данных (GH 41733)Изменено поведение
Seriesконструктор, он больше не будет определять тип данных datetime64 или timedelta64 из строковых записей (GH 41731)Изменено поведение
Timestampконструктор сnp.datetime64объект иtzпередается для интерпретации входных данных как локального времени, а не времени UTC (GH 42288)Изменено поведение
Timestamp.utcfromtimestamp()для возврата объекта с учетом часового пояса, удовлетворяющегоTimestamp.utcfromtimestamp(val).timestamp() == val(GH 45083)Изменено поведение
Indexконструктору при передачеSparseArrayилиSparseDtypeчтобы сохранить этот тип данных вместо приведения кnumpy.ndarray(GH 43930)Изменено поведение операций, подобных setitem (
__setitem__,fillna,where,mask,replace,insert, fill_value дляshift) на объекте сDatetimeTZDtypeпри использовании значения с несовпадающим часовым поясом, значение будет приведено к часовому поясу объекта вместо приведения обоих к типу object-dtype (GH 44243)Изменено поведение
Index,Series,DataFrameконструкторы с данными с плавающей точкой иDatetimeTZDtype, данные теперь интерпретируются как время UTC вместо локального времени, что согласуется с обработкой данных целочисленного типа (GH 45573)Изменено поведение
SeriesиDataFrameконструкторы с целочисленным dtype и данными с плавающей точкой, содержащимиNaN, теперь вызываетIntCastingNaNError(GH 40110)Изменено поведение
SeriesиDataFrameконструкторы с целым числомdtypeи значения, которые слишком велики для безпотерьного приведения к этому типу данных, теперь вызываютValueError(GH 41734)Изменено поведение
SeriesиDataFrameконструкторы с целым числомdtypeи значения, имеющие либоdatetime64илиtimedelta64типы данных, теперь вызываетTypeError, используйтеvalues.view("int64")вместо (GH 41770)Удален устаревший
baseиloffsetаргументы изpandas.DataFrame.resample(),pandas.Series.resample()иpandas.Grouper. Используйтеoffsetилиoriginвместо (GH 31809)Изменено поведение
Series.fillna()иDataFrame.fillna()сtimedelta64[ns]тип данных и несовместимыйfill_value; теперь это преобразуется вobjectdtype вместо вызова исключения, что согласуется с поведением для других типов данных (GH 45746)Изменить аргумент по умолчанию для
regexдляSeries.str.replace()изTruetoFalse. Кроме того, один символpatсregex=Trueтеперь обрабатывается как регулярное выражение вместо строкового литерала. (GH 36695, GH 24804)Изменено поведение
DataFrame.any()иDataFrame.all()сbool_only=True; столбцы object-dtype со всеми булевыми значениями больше не будут включаться, вручную приведены кboolтип данных сначала (GH 46188)Изменено поведение
DataFrame.max(),DataFrame.min,DataFrame.mean,DataFrame.median,DataFrame.skew,DataFrame.kurtсaxis=Noneдля возврата скаляра, применяя агрегацию по обеим осям (GH 45072)Изменено поведение сравнения
Timestampсdatetime.dateобъект; теперь они сравниваются как неравные и вызывают ошибку при сравнениях на неравенство, соответствуяdatetime.datetimeповедение (GH 36131)Изменено поведение сравнения
NaTсdatetime.dateобъект; теперь при сравнении на неравенство вызываются исключения (GH 39196)Принудительное устаревание тихого удаления столбцов, которые вызывали
TypeErrorвSeries.transformиDataFrame.transformпри использовании со списком или словарём (GH 43740)Изменено поведение
DataFrame.apply()со списко-подобным, чтобы любая частичная ошибка вызывала исключение (GH 43740)Изменено поведение
DataFrame.to_latex()теперь использовать реализацию Styler черезStyler.to_latex()(GH 47970)Изменено поведение
Series.__setitem__()с целочисленным ключом иFloat64Indexкогда ключ отсутствует в индексе; ранее мы рассматривали ключ как позиционный (поведение, подобноеseries.iloc[key] = val), теперь мы рассматриваем это как метку (ведёт себя какseries.loc[key] = val), согласованно сSeries.__getitem__`()поведение (GH 33469)Удалено
na_sentinelаргумент изfactorize(),Index.factorize(), иExtensionArray.factorize()(GH 47157)Изменено поведение
Series.diff()иDataFrame.diff()сExtensionDtypeтипы данных, массивы которых не реализуютdiff, теперь вызываютTypeErrorвместо приведения к numpy (GH 31025)Принудительное устаревание вызова numpy "ufunc" на
DataFrameсmethod="outer"; теперь вызываетNotImplementedError(GH 36955)Принудительное устаревание, запрещающее передачу
numeric_only=TruetoSeriesредукции (rank,any,all, …) с нечисловым типом данных (GH 47500)Изменено поведение
DataFrameGroupBy.apply()иSeriesGroupBy.apply()так чтоgroup_keysсоблюдается, даже если обнаружен трансформер (GH 34998)Сравнения между
DataFrameиSeriesгде столбцы фрейма не соответствуют индексу серии, вызываютValueErrorвместо автоматического выравнивания, выполнитеleft, right = left.align(right, axis=1, copy=False)перед сравнением (GH 36795)Принудительное устаревание
numeric_only=None(по умолчанию) в редукциях DataFrame, которые молча отбрасывали столбцы, вызвавшие ошибку;numeric_onlyтеперь по умолчаниюFalse(GH 41480)Изменено значение по умолчанию для
numeric_onlytoFalseво всех методах DataFrame с этим аргументом (GH 46096, GH 46906)Изменено значение по умолчанию для
numeric_onlytoFalseвSeries.rank()(GH 47561)Принудительное устаревание тихого удаления лишних столбцов в операциях groupby и resample, когда
numeric_only=False(GH 41475)Принудительное устаревание тихого отбрасывания лишних столбцов в
Rolling,Expanding, иExponentialMovingWindowоперации. Теперь будет вызыватьсяerrors.DataError(GH 42834)Измененное поведение при установке значений с помощью
df.loc[:, foo] = barилиdf.iloc[:, foo] = bar, теперь они всегда пытаются установить значения на месте перед возвратом к приведению типов (GH 45333)Изменено значение по умолчанию для
numeric_onlyв различныхDataFrameGroupByметоды; все методы теперь по умолчанию используютnumeric_only=False(GH 46072)Изменено значение по умолчанию для
numeric_onlytoFalseвResamplerметоды (GH 47177)Использование метода
DataFrameGroupBy.transform()с вызываемым объектом, возвращающим DataFrames, будет выровнен по индексу входных данных (GH 47244)При предоставлении списка столбцов длиной один для
DataFrame.groupby(), ключи, которые возвращаются при итерации по результирующемуDataFrameGroupByобъект теперь будет кортежами длины один (GH 47761)Удалены устаревшие методы
ExcelWriter.write_cells(),ExcelWriter.save(),ExcelWriter.cur_sheet(),ExcelWriter.handles(),ExcelWriter.path()(GH 45795)The
ExcelWriterатрибутbookбольше не может быть установлен; он все еще доступен для доступа и изменения (GH 48943)Удалены неиспользуемые
*argsи**kwargsвRolling,Expanding, иExponentialMovingWindowops (GH 47851)Удалён устаревший аргумент
line_terminatorизDataFrame.to_csv()(GH 45302)Удалён устаревший аргумент
labelизlreshape()(GH 30219)Аргументы после
exprвDataFrame.eval()иDataFrame.query()являются только ключевыми словами (GH 47587)Удалено
Index._get_attributes_dict()(GH 50648)Удалено
Series.__array_wrap__()(GH 50648)Изменено поведение
DataFrame.value_counts()для возвратаSeriesсMultiIndexдля любого спискообразного (один элемент или нет), ноIndexдля одиночной метки (GH 50829)
Улучшения производительности#
Улучшение производительности в
DataFrameGroupBy.median()иSeriesGroupBy.median()иDataFrameGroupBy.cumprod()для nullable типов данных (GH 37493)Улучшение производительности в
DataFrameGroupBy.all(),DataFrameGroupBy.any(),SeriesGroupBy.all(), иSeriesGroupBy.any()для типа данных object (GH 50623)Улучшение производительности в
MultiIndex.argsort()иMultiIndex.sort_values()(GH 48406)Улучшение производительности в
MultiIndex.size()(GH 48723)Улучшение производительности в
MultiIndex.union()без пропущенных значений и без дубликатов (GH 48505, GH 48752)Улучшение производительности в
MultiIndex.difference()(GH 48606)Улучшение производительности в
MultiIndexоперации над множествами с sort=None (GH 49010)Улучшение производительности в
DataFrameGroupBy.mean(),SeriesGroupBy.mean(),DataFrameGroupBy.var(), иSeriesGroupBy.var()для типов данных extension array (GH 37493)Улучшение производительности в
MultiIndex.isin()когдаlevel=None(GH 48622, GH 49577)Улучшение производительности в
MultiIndex.putmask()(GH 49830)Улучшение производительности в
Index.union()иMultiIndex.union()когда индекс содержит дубликаты (GH 48900)Улучшение производительности в
Series.rank()для типов данных на основе pyarrow (GH 50264)Улучшение производительности в
Series.searchsorted()для типов данных на основе pyarrow (GH 50447)Улучшение производительности в
Series.fillna()для типов данных extension array (GH 49722, GH 50078)Улучшение производительности в
Index.join(),Index.intersection()иIndex.union()для масок и типов arrow, когдаIndexмонотонен (GH 50310, GH 51365)Улучшение производительности для
Series.value_counts()с обнуляемым типом данных (GH 48338)Улучшение производительности для
Seriesконструктор, передающий целочисленный массив numpy с nullable dtype (GH 48338)Улучшение производительности для
DatetimeIndexконструктор, передавая список (GH 48609)Улучшение производительности в
merge()иDataFrame.join()при объединении по отсортированномуMultiIndex(GH 48504)Улучшение производительности в
to_datetime()при разборе строк со смещениями часовых поясов (GH 50107)Улучшение производительности в
DataFrame.loc()иSeries.loc()для индексации на основе кортежа вMultiIndex(GH 48384)Улучшение производительности для
Series.replace()с категориальным типом данных (GH 49404)Улучшение производительности для
MultiIndex.unique()(GH 48335)Улучшение производительности для операций индексирования с nullable и arrow dtypes (GH 49420, GH 51316)
Улучшение производительности для
concat()с индексами на основе extension array (GH 49128, GH 49178)Улучшение производительности для
api.types.infer_dtype()(GH 51054)Уменьшение использования памяти
DataFrame.to_pickle()/Series.to_pickle()при использовании BZ2 или LZMA (GH 49068)Улучшение производительности для
StringArrayконструктор, передающий массив numpy с типомnp.str_(GH 49109)Улучшение производительности в
from_tuples()(GH 50620)Улучшение производительности в
factorize()(GH 49177)Улучшение производительности в
__setitem__()(GH 50248, GH 50632)Улучшение производительности в
ArrowExtensionArrayметоды сравнения, когда массив содержит NA (GH 50524)Улучшение производительности в
to_numpy()(GH 49973, GH 51227)Улучшение производительности при разборе строк в
BooleanDtype(GH 50613)Улучшение производительности в
DataFrame.join()при соединении по подмножествуMultiIndex(GH 48611)Улучшение производительности для
MultiIndex.intersection()(GH 48604)Улучшение производительности в
DataFrame.__setitem__()(GH 46267)Улучшение производительности в
varиstdдля nullable типов данных (GH 48379).Улучшение производительности при итерации по pyarrow и nullable типам данных (GH 49825, GH 49851)
Улучшения производительности для
read_sas()(GH 47403, GH 47405, GH 47656, GH 48502)Улучшение памяти в
RangeIndex.sort_values()(GH 48801)Улучшение производительности в
Series.to_numpy()ifcopy=Trueизбегая двойного копирования (GH 24345)Улучшение производительности в
Series.rename()сMultiIndex(GH 21055)Улучшение производительности в
DataFrameGroupByиSeriesGroupByкогдаbyявляется категориальным типом иsort=False(GH 48976)Улучшение производительности в
DataFrameGroupByиSeriesGroupByкогдаbyявляется категориальным типом иobserved=False(GH 49596)Улучшение производительности в
read_stata()с параметромindex_colустановлено вNone(по умолчанию). Теперь индекс будетRangeIndexвместоInt64Index(GH 49745)Улучшение производительности в
merge()при слиянии не по индексу - новый индекс теперь будетRangeIndexвместоInt64Index(GH 49478)Улучшение производительности в
DataFrame.to_dict()иSeries.to_dict()при использовании любых необъектных типов данных (GH 46470)Улучшение производительности в
read_html()когда есть несколько таблиц (GH 49929)Улучшение производительности в
Periodконструктор при создании из строки или целого числа (GH 38312)Улучшение производительности в
to_datetime()при использовании'%Y%m%d'формат (GH 17410)Улучшение производительности в
to_datetime()когда формат задан или может быть выведен (GH 50465)Улучшение производительности в
Series.median()для nullable типов данных (GH 50838)Улучшение производительности в
read_csv()при передачеto_datetime()лямбда-функция дляdate_parserи входные данные имеют смещённые временные зоны (GH 35296)Улучшение производительности в
SeriesGroupBy.value_counts()с категориальным типом данных (GH 46202)Исправлена утечка ссылки в
read_hdf()(GH 37441)Исправлена утечка памяти в
DataFrame.to_json()иSeries.to_json()при сериализации дат и временных интервалов (GH 40443)Уменьшено использование памяти во многих
DataFrameGroupByметоды (GH 51090)Улучшение производительности в
DataFrame.round()для целого числаdecimalпараметр (GH 17254)Улучшение производительности в
DataFrame.replace()иSeries.replace()при использовании большого словаря дляto_replace(GH 6697)Улучшение памяти в
StataReaderпри чтении файлов с возможностью поиска (GH 48922)
Исправления ошибок#
Категориальный#
Ошибка в
Categorical.set_categories()потеря информации о типе данных (GH 48812)Ошибка в
Series.replace()с категориальным типом данных, когдаto_replaceзначения перекрываются с новыми значениями (GH 49404)Ошибка в
Series.replace()с категориальным типом данных, теряющим нулевые типы данных базовых категорий (GH 49404)Ошибка в
DataFrame.groupby()иSeries.groupby()переупорядочивал категории при использовании в качестве группировщика (GH 48749)Ошибка в
Categoricalконструктор при создании изCategoricalобъект иdtype="category"потеря упорядоченности (GH 49309)Ошибка в
SeriesGroupBy.min(),SeriesGroupBy.max(),DataFrameGroupBy.min(), иDataFrameGroupBy.max()с неупорядоченнымиCategoricalDtypeбез групп не удалось вызватьTypeError(GH 51034)
Datetimelike#
Ошибка в
pandas.infer_freq(), вызываяTypeErrorпри выводе наRangeIndex(GH 47084)Ошибка в
to_datetime()некорректное возбуждениеOverflowErrorсо строковыми аргументами, соответствующими большим целым числам (GH 50533)Ошибка в
to_datetime()вызывал ошибку на недопустимых смещениях сerrors='coerce'иinfer_datetime_format=True(GH 48633)Ошибка в
DatetimeIndexконструктор не смог вызвать исключение, когдаtz=Noneявно указан вместе с учитывающим часовой поясdtypeили данные (GH 48659)Ошибка при вычитании
datetimeскаляр изDatetimeIndexне удается сохранить оригинальныйfreqатрибут (GH 48818)Ошибка в
pandas.tseries.holiday.Holidayгде полуоткрытый интервал дат вызывает несовместимые типы возвращаемых значений изUSFederalHolidayCalendar.holidays()(GH 49075)Ошибка в отображении
DatetimeIndexиSeriesиDataFrameс типами данных, учитывающими часовой пояс, сdateutilилиzoneinfoчасовые пояса вблизи переходов на летнее время (GH 49684)Ошибка в
to_datetime()вызывалValueErrorпри разбореTimestamp,datetime.datetime,datetime.date, илиnp.datetime64объекты, когда не-ISO8601formatбыл передан (GH 49298, GH 50036)Ошибка в
to_datetime()вызывалValueErrorпри разборе пустой строки и переданного не-ISO8601 формата. Теперь пустые строки будут разбираться какNaT, для совместимости с тем, как это делается для форматов ISO8601 (GH 50251)Ошибка в
TimestampпоказывалUserWarning, который не был доступен пользователям, при разборе не-ISO8601 разделённых строк дат (GH 50232)Ошибка в
to_datetime()показывал вводящую в заблуждениеValueErrorпри разборе дат с форматом, содержащим директиву ISO недели и директиву ISO дня недели (GH 50308)Ошибка в
Timestamp.round()когдаfreqаргумент имеет нулевую длительность (например, "0ns"), возвращая некорректные результаты вместо вызова исключения (GH 49737)Ошибка в
to_datetime()не вызывалValueErrorкогда был передан неверный формат иerrorsбыл'ignore'или'coerce'(GH 50266)Ошибка в
DateOffsetвыбрасывалTypeErrorпри создании с миллисекундами и другим аргументом сверхдневного уровня (GH 49897)Ошибка в
to_datetime()не вызывалValueErrorпри разборе строки с десятичной датой в формате'%Y%m%d'(GH 50051)Ошибка в
to_datetime()не преобразовывалNonetoNaTпри разборе строк дат со смещением в формате ISO8601 (GH 50071)Ошибка в
to_datetime()не возвращал входные данные при разборе строки даты вне допустимого диапазона сerrors='ignore'иformat='%Y%m%d'(GH 14487)Ошибка в
to_datetime()преобразовывал временные зоны без учета часового поясаdatetime.datetimeв учитывающие часовой пояс при разборе строк с информацией о часовом поясе, формате ISO8601 иutc=False(GH 50254)Ошибка в
to_datetime()выбрасывалValueErrorпри парсинге дат в формате ISO8601, где некоторые значения не были дополнены нулями (GH 21422)Ошибка в
to_datetime()давал некорректные результаты при использованииformat='%Y%m%d'иerrors='ignore'(GH 26493)Ошибка в
to_datetime()не удавалось разобрать строки дат'today'и'now'ifformatне был ISO8601 (GH 50359)Ошибка в
Timestamp.utctimetuple()вызовTypeError(GH 32174)Ошибка в
to_datetime()вызывалValueErrorпри разборе смещенных временных зонTimestampсerrors='ignore'(GH 50585)Ошибка в
to_datetime()неправильно обрабатывал входные данные с плавающей точкой в пределах 1unitграниц переполнения (GH 50183)Ошибка в
to_datetime()с единицей “Y” или “M” даёт некорректные результаты, не совпадающие с поточечнымиTimestampрезультаты (GH 50870)Ошибка в
Series.interpolate()иDataFrame.interpolate()с типами datetime или timedelta, ошибочно вызываяValueError(GH 11312)Ошибка в
to_datetime()не возвращал входные данные сerrors='ignore'когда входные данные были вне допустимого диапазона (GH 50587)Ошибка в
DataFrame.from_records()когда заданDataFrameввод с колонками datetime64 с информацией о часовом поясе некорректно удаляет информацию о часовом поясе (GH 51162)Ошибка в
to_datetime()вызывалdecimal.InvalidOperationпри разборе строк дат сerrors='coerce'(GH 51084)Ошибка в
to_datetime()с обоимиunitиoriginуказанный возвращает некорректные результаты (GH 42624)Ошибка в
Series.astype()иDataFrame.astype()при преобразовании объекта типа object, содержащего даты и время с учетом часового пояса или строки, вdatetime64[ns]неправильная локализация как UTC вместо вызоваTypeError(GH 50140)Ошибка в
DataFrameGroupBy.quantile()иSeriesGroupBy.quantile()с datetime или timedelta dtypes, дающими некорректные результаты для групп, содержащихNaT(GH 51373)Ошибка в
DataFrameGroupBy.quantile()иSeriesGroupBy.quantile()некорректно вызывается сPeriodDtypeилиDatetimeTZDtype(GH 51373)
Timedelta#
Ошибка в
to_timedelta()вызов ошибки, когда входные данные имеют nullable dtypeFloat64(GH 48796)Ошибка в
Timedeltaконструктор некорректно вызывал ошибку вместо возвратаNaTкогда заданnp.timedelta64("nat")(GH 48898)Ошибка в
Timedeltaконструктор не смог вызвать исключение при передаче одновременноTimedeltaобъект и ключевые слова (например, дни, секунды) (GH 48898)Ошибка в
Timedeltaсравнения с очень большимиdatetime.timedeltaобъекты некорректно вызываютOutOfBoundsTimedelta(GH 49021)
Часовые пояса#
Ошибка в
Series.astype()иDataFrame.astype()с object-dtype, содержащим несколько объектов с учетом часового поясаdatetimeобъекты с разнородными часовыми поясами вDatetimeTZDtypeнеправильное возникновение (GH 32581)Ошибка в
to_datetime()не удавалось разобрать строки дат с названием часового пояса, когдаformatбыл указан с%Z(GH 49748)Улучшенное сообщение об ошибке при передаче недопустимых значений в
ambiguousпараметр вTimestamp.tz_localize()(GH 49565)Ошибка в разборе строк, некорректно разрешающая
Timestampбыть созданным с недопустимым часовым поясом, что вызывало ошибку при попытке печати (GH 50668)Исправлено сообщение TypeError в
objects_to_datetime64ns()для информирования о том, что DatetimeIndex имеет смешанные часовые пояса (GH 50974)
Числовой#
Ошибка в
DataFrame.add()нельзя применить ufunc, когда входные данные содержат смешанные типы DataFrame и Series (GH 39853)Ошибка в арифметических операциях над
Seriesне распространяет маску при комбинировании масок типов данных и numpy типов данных (GH 45810, GH 42630)Ошибка в
DataFrame.sem()иSeries.sem()где ошибочныйTypeErrorвсегда вызывал исключение при использовании данных, поддерживаемыхArrowDtype(GH 49759)Ошибка в
Series.__add__()приведение к объекту для списка и маскированногоSeries(GH 22962)Ошибка в
mode()гдеdropna=Falseне учитывалось, когда былоNAзначения (GH 50982)Ошибка в
DataFrame.query()сengine="numexpr"и имена столбцовminилиmaxвызоветTypeError(GH 50937)Ошибка в
DataFrame.min()иDataFrame.max()с данными, учитывающими часовой пояс, содержащимиpd.NaTиaxis=1возвращал неверные результаты (GH 51242)
Преобразование#
Ошибка при построении
Seriesсint64dtype из списка строк вызывает ошибку вместо приведения типа (GH 44923)Ошибка при построении
Seriesс маскированным типом данных и булевыми значениямиNAвызывая (GH 42137)Ошибка в
DataFrame.eval()некорректно вызывалAttributeErrorкогда в вызове функции есть отрицательные значения (GH 46471)Ошибка в
Series.convert_dtypes()не преобразует dtype в nullable dtype, когдаSeriesсодержитNAи имеет тип данныхobject(GH 48791)Ошибка, где любой
ExtensionDtypeподкласс сkind="M"интерпретировался бы как тип часового пояса (GH 34986)Ошибка в
arrays.ArrowExtensionArrayкоторый вызоветNotImplementedErrorпри передаче последовательности строк или бинарных данных (GH 49172)Ошибка в
Series.astype()вызовpyarrow.ArrowInvalidпри преобразовании из строкового типа данных не-pyarrow в числовой тип pyarrow (GH 50430)Ошибка в
DataFrame.astype()изменение входного массива на месте при преобразовании вstringиcopy=False(GH 51073)Ошибка в
Series.to_numpy()преобразование в массив NumPy перед применениемna_value(GH 48951)Ошибка в
DataFrame.astype()без копирования данных при преобразовании в тип pyarrow (GH 50984)Ошибка в
to_datetime()не учитывалexactаргумент, когдаformatбыл в формате ISO8601 (GH 12649)Ошибка в
TimedeltaArray.astype()вызовTypeErrorпри преобразовании в тип длительности pyarrow (GH 49795)Ошибка в
DataFrame.eval()иDataFrame.query()вызов исключения для типов данных расширенных массивов (GH 29618, GH 50261, GH 31913)Ошибка в
Series()не копирует данные при создании изIndexиdtypeравноdtypeизIndex(GH 52008)
Строки#
Ошибка в
pandas.api.types.is_string_dtype()который не вернётTrueдляStringDtypeилиArrowDtypeсpyarrow.string()(GH 15585)Ошибка при преобразовании строковых типов данных в "datetime64[ns]" или "timedelta64[ns]" с некорректным вызовом
TypeError(GH 36153)Ошибка при установке значений в столбце строкового типа данных с массивом, изменяющим массив как побочный эффект, когда он содержит пропущенные значения (GH 51299)
Interval#
Ошибка в
IntervalIndex.is_overlapping()некорректный вывод, если интервал имеет дублирующиеся левые границы (GH 49581)Ошибка в
Series.infer_objects()не удается определитьIntervalDtypeдля объектной серииIntervalобъекты (GH 50090)Ошибка в
Series.shift()сIntervalDtypeи недопустимый nullfill_valueне удалось вызватьTypeError(GH 51258)
Индексирование#
Ошибка в
DataFrame.__setitem__()вызывал исключение, когда индексатор являетсяDataFrameсbooleanтип данных (GH 47125)Ошибка в
DataFrame.reindex()заполнение неправильными значениями при индексировании столбцов и индекса дляuintтипы данных (GH 48184)Ошибка в
DataFrame.loc()при установкеDataFrameс разными типами данных, приводящими значения к единому типу данных (GH 50467)Ошибка в
DataFrame.sort_values()гдеNoneне возвращался, когдаbyявляется пустым списком иinplace=True(GH 50643)Ошибка в
DataFrame.loc()приведение типов данных при установке значений с помощью индексатора списка (GH 49159)Ошибка в
Series.loc()вызов ошибки для выхода за границы конечного индекса среза (GH 50161)Ошибка в
DataFrame.loc()вызовValueErrorсо всемиFalseboolиндексатор и пустой объект (GH 51450)Ошибка в
DataFrame.loc()вызовValueErrorсboolиндексатор иMultiIndex(GH 47687)Ошибка в
DataFrame.loc()вызовIndexErrorпри установке значений для столбца на основе pyarrow с нескалярным индексатором (GH 50085)Ошибка в
DataFrame.__getitem__(),Series.__getitem__(),DataFrame.__setitem__()иSeries.__setitem__()при индексировании по индексам с расширенными типами данных с плавающей точкой (Float64&Float64) или сложные типы данных с использованием целых чисел (GH 51053)Ошибка в
DataFrame.loc()изменяющий объект при установке несовместимого значения с пустым индексатором (GH 45981)Ошибка в
DataFrame.__setitem__()вызовValueErrorкогда правая сторона равнаDataFrameсMultiIndexстолбцы (GH 49121)Ошибка в
DataFrame.reindex()приведение типа данных кobjectкогдаDataFrameимеет один столбец типа extension array при переиндексацииcolumnsиindex(GH 48190)Ошибка в
DataFrame.iloc()вызовIndexErrorкогда индексатор являетсяSeriesс числовым типом данных extension array dtype (GH 49521)Ошибка в
describe()при форматировании процентилей в результирующем индексе отображалось больше десятичных знаков, чем необходимо (GH 46362)Ошибка в
DataFrame.compare()не распознает различия при сравненииNAсо значением в обнуляемых типах данных (GH 48939)Ошибка в
Series.rename()сMultiIndexпотеря типов данных массивов расширений (GH 21055)Ошибка в
DataFrame.isetitem()приведение типов данных расширенных массивов вDataFrameв объект (GH 49922)Ошибка в
Series.__getitem__()возвращая поврежденный объект при выборе из пустого объекта на основе pyarrow (GH 51734)Ошибка в
BusinessHourприведёт к созданиюDatetimeIndexзавершаться ошибкой, когда в индексе не было указано время открытия (GH 49835)
Отсутствует#
Ошибка в
Index.equals()вызовTypeErrorкогдаIndexсостоит из кортежей, содержащихNA(GH 48446)Ошибка в
Series.map()вызывало некорректный результат, когда данные содержали NaN и использовалось отображение defaultdict (GH 48813)Ошибка в
NAвызовTypeErrorвместо возвратаNAпри выполнении бинарной операции сbytesобъект (GH 49108)Ошибка в
DataFrame.update()сoverwrite=FalseвызовTypeErrorкогдаselfимеет столбец сNaTзначения и столбец отсутствует вother(GH 16713)Ошибка в
Series.replace()вызовRecursionErrorпри замене значения в объектном типе данныхSeriesсодержащийNA(GH 47480)Ошибка в
Series.replace()вызовRecursionErrorпри замене значения в числовомSeriesсNA(GH 50758)
MultiIndex#
Ошибка в
MultiIndex.get_indexer()не совпадающийNaNзначения (GH 29252, GH 37222, GH 38623, GH 42883, GH 43222, GH 46173, GH 48905)Ошибка в
MultiIndex.argsort()вызовTypeErrorкогда индекс содержитNA(GH 48495)Ошибка в
MultiIndex.difference()потеря типа данных extension array (GH 48606)Ошибка в
MultiIndex.set_levelsвызовIndexErrorпри установке пустого уровня (GH 48636)Ошибка в
MultiIndex.unique()потеря типа данных extension array (GH 48335)Ошибка в
MultiIndex.intersection()потеря массива расширения (GH 48604)Ошибка в
MultiIndex.union()потеря массива расширения (GH 48498, GH 48505, GH 48900)Ошибка в
MultiIndex.union()отсутствие сортировки при sort=None и наличии пропущенных значений в индексе (GH 49010)Ошибка в
MultiIndex.append()не проверяя имена на равенство (GH 48288)Ошибка в
MultiIndex.symmetric_difference()потеря массива расширения (GH 48607)Ошибка в
MultiIndex.join()потеря типов данных приMultiIndexимеет дубликаты (GH 49830)Ошибка в
MultiIndex.putmask()потеря массива расширения (GH 49830)Ошибка в
MultiIndex.value_counts()возвращаяSeriesиндексируется плоским индексом кортежей вместоMultiIndex(GH 49558)
I/O#
Ошибка в
read_sas()вызвал фрагментациюDataFrameи вызвалоerrors.PerformanceWarning(GH 48595)Улучшенное сообщение об ошибке в
read_excel()включая имя проблемного листа при возникновении исключения при чтении файла (GH 48706)Ошибка при сериализации подмножества данных на основе PyArrow, которая сериализовала бы все данные вместо подмножества (GH 42600)
Ошибка в
read_sql_query()игнорируяdtypeаргумент, когдаchunksizeуказан и результат пуст (GH 50245)Ошибка в
read_csv()для однострочного csv с меньшим количеством столбцов, чемnamesвызваноerrors.ParserErrorсengine="c"(GH 47566)Ошибка в
read_json()вызов исключения сorient="table"иNAзначение (GH 40255)Ошибка в отображении
stringтипы данных не показывают опцию хранения (GH 50099)Ошибка в
DataFrame.to_string()сheader=Falseкоторый выводил имя индекса на той же строке, что и первая строка данных (GH 49230)Ошибка в
DataFrame.to_string()игнорирование форматирования float для массивов расширений (GH 39336)Исправлена утечка памяти, вызванная инициализацией внутреннего модуля JSON (GH 49222)
Исправлена проблема, когда
json_normalize()неправильно удалял начальные символы из названий столбцов, которые совпадали сsepаргумент (GH 49861)Ошибка в
read_csv()ненужное переполнение для типа данных массива расширений при содержанииNA(GH 32134)Ошибка в
DataFrame.to_dict()не преобразуяNAtoNone(GH 50795)Ошибка в
DataFrame.to_json()где происходил сбой сегментации при неудачной кодировке строки (#N/A N/A)Ошибка в
DataFrame.to_html()сna_repустановить, когдаDataFrameсодержит нескалярные данные (GH 47103)Ошибка в
read_xml()где файлоподобные объекты завершались ошибкой при использовании iterparse (GH 50641)Ошибка в
read_csv()когдаengine="pyarrow"гдеencodingпараметр обрабатывался некорректно (GH 51302)Ошибка в
read_xml()игнорировал повторяющиеся элементы при использовании iterparse (GH 51183)Ошибка в
ExcelWriterоставляя файловые дескрипторы открытыми, если во время инициализации произошло исключение (GH 51443)Ошибка в
DataFrame.to_parquet()где нестроковые индексы или столбцы вызывалиValueErrorкогдаengine="pyarrow"(GH 52036)
Period#
Ошибка в
Period.strftime()иPeriodIndex.strftime(), вызываяUnicodeDecodeErrorкогда была передана специфичная для локали директива (GH 46319)Ошибка при добавлении
Periodобъект в массивDateOffsetобъекты, некорректно вызывающиеTypeError(GH 50162)Ошибка в
Periodгде передача строки с более высоким разрешением, чем наносекунда, приведет кKeyErrorвместо отбрасывания дополнительной точности (GH 50417)Ошибка в разборе строк, представляющих недельные периоды, например, "2017-01-23/2017-01-29" как минутную частоту вместо недельной частоты (GH 50803)
Ошибка в
DataFrameGroupBy.sum(),DataFrameGroupByGroupBy.cumsum(),DataFrameGroupByGroupBy.prod(),DataFrameGroupByGroupBy.cumprod()сPeriodDtypeне удалось вызватьTypeError(GH 51040)Ошибка при разборе пустой строки с
Periodнекорректное возбуждениеValueErrorвместо возвратаNaT(GH 51349)
Построение графиков#
Ошибка в
DataFrame.plot.hist(), не удаляя элементы изweightsсоответствующийNaNзначения вdata(GH 48884)ax.set_xlimиногда вызывалUserWarningкоторые пользователи не могли исправить из-заset_xlimне принимает аргументы парсинга — теперь конвертер используетTimestamp()вместо (GH 49148)
Groupby/resample/rolling#
Ошибка в
ExponentialMovingWindowсonlineне вызывалNotImplementedErrorдля неподдерживаемых операций (GH 48834)Ошибка в
DataFrameGroupBy.sample()вызываетValueErrorкогда объект пуст (GH 48459)Ошибка в
Series.groupby()вызываетValueErrorкогда элемент индекса равен имени индекса (GH 48567)Ошибка в
DataFrameGroupBy.resample()дает нестабильные результаты при передаче пустого DataFrame (GH 47705)Ошибка в
DataFrameGroupByиSeriesGroupByне будет включать ненаблюдаемые категории в результат при группировке по категориальным индексам (GH 49354)Ошибка в
DataFrameGroupByиSeriesGroupByизменял порядок результатов в зависимости от входного индекса при группировке по категориальным переменным (GH 49223)Ошибка в
DataFrameGroupByиSeriesGroupByпри группировке по категориальным данным сортировало бы значения результата, даже при использовании сsort=False(GH 42482)Ошибка в
DataFrameGroupBy.apply()иSeriesGroupBy.applyсas_index=Falseне будет пытаться выполнить вычисление без использования ключей группировки, когда их использование завершилось сбоем сTypeError(GH 49256)Ошибка в
DataFrameGroupBy.describe()будет описывать ключи группы (GH 49256)Ошибка в
SeriesGroupBy.describe()сas_index=Falseбудет иметь неправильную форму (GH 49256)Ошибка в
DataFrameGroupByиSeriesGroupByсdropna=Falseудалял значения NA, когда группировщик был категориальным (GH 36327)Ошибка в
SeriesGroupBy.nunique()неправильно вызывал, когда группировщик был пустой категорией иobserved=True(GH 21334)Ошибка в
SeriesGroupBy.nth()вызывал ошибку, когда группировщик содержал значения NA после выборки изDataFrameGroupBy(GH 26454)Ошибка в
DataFrame.groupby()не будет включатьGrouperуказанныйkeyв результате, когдаas_index=False(GH 50413)Ошибка в
DataFrameGroupBy.value_counts()вызывал ошибку при использовании сTimeGrouper(GH 50486)Ошибка в
Resampler.size()вызвал широкийDataFrameбудет возвращён вместоSeriesсMultiIndex(GH 46826)Ошибка в
DataFrameGroupBy.transform()иSeriesGroupBy.transform()неправильно вызывал исключение, когда группировщик имелaxis=1для"idxmin"и"idxmax"аргументы (GH 45986)Ошибка в
DataFrameGroupByвызывало ошибку при использовании с пустым DataFrame, категориальным группировщиком иdropna=False(GH 50634)Ошибка в
SeriesGroupBy.value_counts()не учитывалsort=False(GH 50482)Ошибка в
DataFrameGroupBy.resample()вызываетKeyErrorпри получении результата из списка ключей при ресемплинге по временному индексу (GH 50840)Ошибка в
DataFrameGroupBy.transform()иSeriesGroupBy.transform()неправильно вызывал исключение, когда группировщик имелaxis=1для"ngroup"аргумент (GH 45986)Ошибка в
DataFrameGroupBy.describe()давал некорректные результаты, когда данные имели дублирующиеся столбцы (GH 50806)Ошибка в
DataFrameGroupBy.agg()сengine="numba"не соблюдаяas_index=False(GH 51228)Ошибка в
DataFrameGroupBy.agg(),SeriesGroupBy.agg(), иResampler.agg()игнорировал аргументы при передаче списка функций (GH 50863)Ошибка в
DataFrameGroupBy.ohlc()игнорируяas_index=False(GH 51413)Ошибка в
DataFrameGroupBy.agg()после выбора подмножества столбцов (например,.groupby(...)[["a", "b"]]) не будет включать группировки в результат (GH 51186)
Изменение формы#
Ошибка в
DataFrame.pivot_table()вызовTypeErrorдля nullable dtype иmargins=True(GH 48681)Ошибка в
DataFrame.unstack()иSeries.unstack()неправильное разворачивание уровняMultiIndexкогдаMultiIndexимеет смешанные имена (GH 48763)Ошибка в
DataFrame.melt()потеря типа данных extension array (GH 41570)Ошибка в
DataFrame.pivot()не учитываяNoneв качестве имени столбца (GH 48293)Ошибка в
DataFrame.join()когдаleft_onилиright_onявляется или включаетCategoricalIndexнекорректное возбуждениеAttributeError(GH 48464)Ошибка в
DataFrame.pivot_table()вызовValueErrorс параметромmargins=Trueкогда результат пустойDataFrame(GH 49240)Уточненное сообщение об ошибке в
merge()при передаче недопустимыхvalidateопция (GH 49417)Ошибка в
DataFrame.explode()вызовValueErrorна нескольких столбцах сNaNvalues или пустые списки (GH 46084)Ошибка в
DataFrame.transpose()сIntervalDtypeстолбец сtimedelta64[ns]конечные точки (GH 44917)Ошибка в
DataFrame.agg()иSeries.agg()игнорировал аргументы при передаче списка функций (GH 50863)
Разреженный#
Ошибка в
Series.astype()при преобразованииSparseDtypeсdatetime64[ns]подтип вint64вызывает ошибку типа данных, несовместимую с неразреженным поведением (GH 49631,:issue:50087)Ошибка в
Series.astype()при преобразовании изdatetime64[ns]toSparse[datetime64[ns]]неправильное возникновение (GH 50082)Ошибка в
Series.sparse.to_coo()вызовSystemErrorкогдаMultiIndexсодержитExtensionArray(GH 50996)
ExtensionArray#
Ошибка в
Series.mean()переполнение без необходимости с нуллифицируемыми целыми числами (GH 48378)Ошибка в
Series.tolist()для nullable dtypes возвращает скаляры numpy вместо скаляров python (GH 49890)Ошибка в
Series.round()для типов данных на основе pyarrow, вызывающихAttributeError(GH 50437)Ошибка при объединении пустого DataFrame с ExtensionDtype с другим DataFrame с тем же ExtensionDtype, результирующий тип данных превратился в object (GH 48510)
Ошибка в
array.PandasArray.to_numpy()вызов исключения сNAзначение, когдаna_valueуказан (GH 40638)Ошибка в
api.types.is_numeric_dtype()где пользовательскийExtensionDtypeне возвращалTrueif_is_numericвозвращёнTrue(GH 50563)Ошибка в
api.types.is_integer_dtype(),api.types.is_unsigned_integer_dtype(),api.types.is_signed_integer_dtype(),api.types.is_float_dtype()где пользовательскийExtensionDtypeне возвращалTrueifkindвозвращал соответствующий тип NumPy (GH 50667)Ошибка в
Seriesконструктор ненужно переполняется для обнуляемых беззнаковых целочисленных типов данных (GH 38798, GH 25880)Ошибка при установке нестрокового значения в
StringArrayвызовValueErrorвместоTypeError(GH 49632)Ошибка в
DataFrame.reindex()не соблюдение значения по умолчаниюcopy=Trueключевое слово в случае столбцов с ExtensionDtype (и, как следствие, также выбор нескольких столбцов с getitem ([]) не приводил к корректному созданию копии) (GH 51197)Ошибка в
ArrowExtensionArrayлогические операции&и|вызовKeyError(GH 51688)
Styler#
Исправление
background_gradient()для nullable dtypeSeriesсNAзначения (GH 50712)
Метаданные#
Исправлено распространение фиксированных метаданных в
DataFrame.corr()иDataFrame.cov()(GH 28283)
Другие#
Ошибка в некорректном принятии строк dtype, содержащих "[pyarrow]" более одного раза (GH 51548)
Ошибка в
Series.searchsorted()непоследовательное поведение при принятииDataFrameв качестве параметраvalue(GH 49620)Ошибка в
array()не удалось вызвать исключение наDataFrameвходные данные (GH 51167)
Участники#
Всего 260 человек внесли патчи в этот релиз. Люди со знаком «+» рядом с именами внесли патч впервые.
5j9 +
ABCPAN-rank +
Aarni Koskela +
Aashish KC +
Абубекер Мохаммед +
Adam Mróz +
Adam Ormondroyd +
Aditya Anulekh +
Ahmed Ibrahim
Акшай Баббар +
Алекса Радойчич +
Alex +
Алекс Бузене +
Alex Kirko
Allison Kwan +
Amay Patel +
Ambuj Pawar +
Amotz +
Andreas Schwab +
Andrew Chen +
Anton Shevtsov
Antonio Ossa Guerra +
Antonio Ossa-Guerra +
Anushka Bishnoi +
Arda Kosar
Armin Berres
Asadullah Naeem +
Asish Mahapatra
Bailey Lissington +
BarkotBeyene
Ben Beasley
Bhavesh Rajendra Patil +
Bibek Jha +
Билл +
Bishwas +
CarlosGDCJ +
Carlotta Fabian +
Chris Roth +
Chuck Cadman +
Corralien +
DG +
Dan Hendry +
Daniel Isaac
David Kleindienst +
David Poznik +
David Rudel +
DavidKleindienst +
Dea María Léon +
Дипак Сирохивал +
Dennis Chukwunta
Douglas Lohmann +
Dries Schaumont
Dustin K +
Edoardo Abati +
Eduardo Chaves +
Ege Özgüroğlu +
Ekaterina Borovikova +
Eli Schwartz +
Elvis Lim +
Emily Taylor +
Emma Carballal Haire +
Эрик Уэлч +
Fangchen Li
Florian Hofstetter +
Flynn Owen +
Фредрик Эрландссон +
Gaurav Sheni
Georeth Chow +
George Munyoro +
Guilherme Beltramini
Гульнур Баймухамбетова +
H L +
Hans
Hatim Zahid +
HighYoda +
Hiki +
Himanshu Wagh +
Hugo van Kemenade +
Idil Ismiguzel +
Ирв Ластиг
Isaac Chung
Isaac Virshup
Дж.Х.М. Дарбишир
JHM Darbyshire (iMac)
JMBurley
Jaime Di Cristina
Jan Koch
JanVHII +
Janosh Riebesell
JasmandeepKaur +
Jeremy Tuloup
Jessica M +
Jonas Haag
Joris Van den Bossche
João Meirelles +
Julia Aoun +
Justus Magin +
Кан Су Мин +
Кевин Шеппард
Khor Chean Wei
Киан Элиаси
Kostya Farber +
KotlinIsland +
Лакмал Пиннадуваге +
Lakshya A Agrawal +
Lawrence Mitchell +
Levi Ob +
Loic Diridollou
Lorenzo Vainigli +
Luca Pizzini +
Лукас Дамо +
Люк Мэнли
Madhuri Patil +
Марк Гарсия
Marco Edward Gorelli
Марко Горелли
Марко Горелли
Maren Westermann +
Maria Stazherova +
Marie K +
Marielle +
Mark Harfouche +
Marko Pacak +
Martin +
Matheus Cerqueira +
Matheus Pedroni +
Matteo Raso +
Мэтью Рёшке
MeeseeksMachine +
Mehdi Mohammadi +
Michael Harris +
Michael Mior +
Natalia Mokeeva +
Neal Muppidi +
Nick Crews
Nishu Choudhary +
Noa Tamir
Noritada Kobayashi
Omkar Yadav +
P. Talley +
Pablo +
Команда разработчиков Pandas
Парфе Гасана
Patrick Hoefler
Pedro Nacht +
Philip +
Пьетро Баттистон
Pooja Subramaniam +
Pranav Saibhushan Ravuri +
Pranav. P. A +
Ральф Гоммерс +
RaphSku +
Richard Shadrach
Robsdedude +
Роджер
Roger Thomas
RogerThomas +
SFuller4 +
Salahuddin +
Sam Rao
Sean Patrick Malloy +
Sebastian Roll +
Shantanu
Shashwat +
Шашват Агравал +
Shiko Wamwea +
Shoham Debnath
Shubhankar Lohani +
Siddhartha Gandhi +
Simon Hawkins
Soumik Dutta +
Sowrov Talukder +
Stefanie Molin
Stefanie Senger +
Stepfen Shawn +
Steven Rotondo
Stijn Van Hoey
Sudhansu +
Sven
Sylvain MARIE
Sylvain Marié
Tabea Kossen +
Тейлор Паккард
Терджи Петерсен
Thierry Moisan
Томас Х +
Thomas Li
Torsten Wörtwein
Tsvika S +
Tsvika Shapira +
Vamsi Verma +
Vinicius Akira +
William Andrea
William Ayd
William Blum +
Wilson Xing +
Xiao Yuan +
Xnot +
Yasin Tatar +
Yuanhao Geng
Yvan Cywan +
Zachary Moon +
Zhengbo Wang +
abonte +
adrienpacifico +
alm
amotzop +
andyjessen +
anonmouse1 +
bang128 +
Бишвас Джа +
calhockemeyer +
carla-alves-24 +
carlotta +
casadipietra +
catmar22 +
cfabian +
codamuse +
dataxerik
davidleon123 +
dependabot[bot] +
fdrocha +
github-actions[bot]
himanshu_wagh +
iofall +
jakirkham +
jbrockmendel
jnclt +
joelchen +
joelsonoda +
joshuabello2550
joycewamwea +
kathleenhang +
krasch +
ltoniazzi +
luke396 +
milosz-martynow +
minat-hub +
mliu08 +
monosans +
nealxm
никитавед +
paradox-lab +
partev
raisadz +
ram vikram singh +
rebecca-palmer
sarvaSanjay +
seljaks +
silviaovo +
smij720 +
soumilbaldota +
stellalin7 +
strawberry beach sandals +
tmoschou +
uzzell +
yqyqyq-W +
yun +
Адам Липпаи
김동현 (Daniel Donghyun Kim) +