1.5.0 中的新增功能(2022 年 9 月 19 日)# 这些是 pandas 1.5.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。 增强功能# pandas-stubs# 该pandas-stubs库现在由 pandas 开发团队支持,为 pandas API 提供类型存根。请访问 pandas-dev/pandas-stubs了解更多信息。 我们感谢 VirtusLab 和 Microsoft 对pandas-stubs 本机 PyArrow 支持的 ExtensionArray # 安装Pyarrow后,用户现在可以创建由 apyarrow.ChunkedArray和支持的 pandas 对象pyarrow.DataType。 参数可以接受 带括号的pyarrow 数据类型dtype的字符串,例如,对于采用参数的 pyarrow 数据类型, 用 初始化。pyarrow"int64[pyarrow]"ArrowDtypepyarrow.DataType In [1]: import pyarrow as pa In [2]: ser_float = pd.Series([1.0, 2.0, None], dtype="float32[pyarrow]") In [3]: ser_float Out[3]: 0 1.0 1 2.0 2 <NA> dtype: float[pyarrow] In [4]: list_of_int_type = pd.ArrowDtype(pa.list_(pa.int64())) In [5]: ser_list = pd.Series([[1, 2], [3, None]], dtype=list_of_int_type) In [6]: ser_list Out[6]: 0 [1. 2.] 1 [ 3. nan] dtype: list<item: int64>[pyarrow] In [7]: ser_list.take([1, 0]) Out[7]: 1 [ 3. nan] 0 [1. 2.] dtype: list<item: int64>[pyarrow] In [8]: ser_float * 5 Out[8]: 0 5.0 1 10.0 2 <NA> dtype: float[pyarrow] In [9]: ser_float.mean() Out[9]: 1.5 In [10]: ser_float.dropna() Out[10]: 0 1.0 1 2.0 dtype: float[pyarrow] 大多数操作均受支持并已使用pyarrow 计算函数实现。我们建议安装最新版本的 PyArrow 以访问最近实现的计算功能。 警告 此功能是实验性的,API 可能会在未来版本中更改,恕不另行通知。 DataFrame 交换协议实现# Pandas 现在实现了 DataFrame 交换 API 规范。有关 API 的完整详细信息,请访问https://data-apis.org/dataframe-protocol/latest/index.html 该协议由两部分组成: DataFrame.__dataframe__()生成交换对象的新方法。它有效地将 pandas 数据帧作为交换对象“导出”,因此任何其他实现了该协议的库都可以“导入”该数据帧,而无需了解生产者的任何信息,除了它生成交换对象之外。 新函数pandas.api.interchange.from_dataframe()可以从任何符合库中获取任意交换对象并从中构造一个 pandas DataFrame。 造型器# 最值得注意的发展是新方法Styler.concat(),它允许添加自定义页脚行以可视化数据的附加计算,例如总计和计数等。(GH 43875,GH 46186) 此外,还有一种替代输出方法,它允许使用 Styler 的格式化方法来创建 CSV ( GH 44502Styler.to_string() )等。 还提供了一项新功能,Styler.relabel_index()可以完全自定义索引或列标题的显示(GH 47864) 小功能改进包括: 在 Excel 中添加渲染border和CSS 属性的功能( GH 42276 )border-{side} 使关键字参数包含:Styler.highlight_null()现在接受color和弃用null_color,尽管这仍然向后兼容(GH 45907) group_keys用in #控制索引DataFrame.resample() 该参数group_keys已添加到该方法中DataFrame.resample()。与 一样,此参数控制使用DataFrame.groupby()时是否将每个组添加到重采样中的索引中。Resampler.apply() 警告 不指定group_keys参数将保留先前的行为,并在结果因指定而改变时发出警告group_keys=False。在 pandas 的未来版本中,不指定group_keys将默认与group_keys=False. In [11]: df = pd.DataFrame( ....: {'a': range(6)}, ....: index=pd.date_range("2021-01-01", periods=6, freq="8H") ....: ) ....: In [12]: df.resample("D", group_keys=True).apply(lambda x: x) Out[12]: a 2021-01-01 2021-01-01 00:00:00 0 2021-01-01 08:00:00 1 2021-01-01 16:00:00 2 2021-01-02 2021-01-02 00:00:00 3 2021-01-02 08:00:00 4 2021-01-02 16:00:00 5 In [13]: df.resample("D", group_keys=False).apply(lambda x: x) Out[13]: a 2021-01-01 00:00:00 0 2021-01-01 08:00:00 1 2021-01-01 16:00:00 2 2021-01-02 00:00:00 3 2021-01-02 08:00:00 4 2021-01-02 16:00:00 5 以前,生成的索引将取决于 返回的值apply,如以下示例所示。 In [1]: # pandas 1.3 In [2]: df.resample("D").apply(lambda x: x) Out[2]: a 2021-01-01 00:00:00 0 2021-01-01 08:00:00 1 2021-01-01 16:00:00 2 2021-01-02 00:00:00 3 2021-01-02 08:00:00 4 2021-01-02 16:00:00 5 In [3]: df.resample("D").apply(lambda x: x.reset_index()) Out[3]: index a 2021-01-01 0 2021-01-01 00:00:00 0 1 2021-01-01 08:00:00 1 2 2021-01-01 16:00:00 2 2021-01-02 0 2021-01-02 00:00:00 3 1 2021-01-02 08:00:00 4 2 2021-01-02 16:00:00 5 来自傻瓜# 添加了新函数from_dummies(),将虚拟编码转换DataFrame为分类DataFrame。 In [11]: import pandas as pd In [12]: df = pd.DataFrame({"col1_a": [1, 0, 1], "col1_b": [0, 1, 0], ....: "col2_a": [0, 1, 0], "col2_b": [1, 0, 0], ....: "col2_c": [0, 0, 1]}) ....: In [13]: pd.from_dummies(df, sep="_") Out[13]: col1 col2 0 a b 1 b a 2 a c 写入 ORC 文件# 新方法DataFrame.to_orc()允许写入 ORC 文件 ( GH 43864 )。 此功能取决于pyarrow库。有关更多详细信息,请参阅ORC 上的 IO 文档。 警告 由于 pyarrow 出现一些问题,强烈建议使用conda 安装 pyarrow。 to_orc()需要 pyarrow>=7.0.0。 to_orc()Windows 尚不支持,您可以在安装可选依赖项上找到有效的环境。 有关支持的数据类型,请参阅Arrow 中支持的 ORC 功能。 目前,当数据帧转换为 ORC 文件时,日期时间列中的时区不会保留。 df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]}) df.to_orc("./out.orc") 直接从 TAR 档案中读取# read_csv()像或现在这样的 I/O 方法DataFrame.to_json()允许直接读取和写入 TAR 存档 ( GH 44787 )。 df = pd.read_csv("./movement.tar.gz") # ... df.to_csv("./out.tar.gz") 这支持.tar、.tar.gz和.tar.bz存档.tar.xz2。所使用的压缩方法是从文件名推断出来的。如果无法推断压缩方法,请使用参数compression: df = pd.read_csv(some_file_obj, compression={"method": "tar", "mode": "r:gz"}) # noqa F821 (mode作为其中一种tarfile.open模式:https://docs.python.org/3/library/tarfile.html#tarfile.open) read_xml 现在支持dtype、converters和parse_dates# 与其他 IO 方法类似,pandas.read_xml()现在支持将特定的 dtypes 分配给列、应用转换器方法和解析日期 ( GH 43567 )。 In [14]: from io import StringIO In [15]: xml_dates = """<?xml version='1.0' encoding='utf-8'?> ....: <data> ....: <row> ....: <shape>square</shape> ....: <degrees>00360</degrees> ....: <sides>4.0</sides> ....: <date>2020-01-01</date> ....: </row> ....: <row> ....: <shape>circle</shape> ....: <degrees>00360</degrees> ....: <sides/> ....: <date>2021-01-01</date> ....: </row> ....: <row> ....: <shape>triangle</shape> ....: <degrees>00180</degrees> ....: <sides>3.0</sides> ....: <date>2022-01-01</date> ....: </row> ....: </data>""" ....: In [16]: df = pd.read_xml( ....: StringIO(xml_dates), ....: dtype={'sides': 'Int64'}, ....: converters={'degrees': str}, ....: parse_dates=['date'] ....: ) ....: In [17]: df Out[17]: shape degrees sides date 0 square 00360 4 2020-01-01 1 circle 00360 <NA> 2021-01-01 2 triangle 00180 3 2022-01-01 In [18]: df.dtypes Out[18]: shape object degrees object sides Int64 date datetime64[ns] dtype: object read_xml 现在支持大型 XML 使用iterparse# 对于数百兆字节到千兆字节的非常大的 XML 文件,pandas.read_xml() 现在支持使用lxml 的 iterparse和etree 的 iterparse解析如此大的文件 ,这些方法是内存高效的方法,可以迭代 XML 树并提取特定元素和属性,而无需将整个树保留在内存中(GH 45442)。 In [1]: df = pd.read_xml( ... "/path/to/downloaded/enwikisource-latest-pages-articles.xml", ... iterparse = {"page": ["title", "ns", "id"]}) ... ) df Out[2]: title ns id 0 Gettysburg Address 0 21450 1 Main Page 0 42950 2 Declaration by United Nations 0 8435 3 Constitution of the United States of America 0 8435 4 Declaration of Independence (Israel) 0 17858 ... ... ... ... 3578760 Page:Black cat 1897 07 v2 n10.pdf/17 104 219649 3578761 Page:Black cat 1897 07 v2 n10.pdf/43 104 219649 3578762 Page:Black cat 1897 07 v2 n10.pdf/44 104 219649 3578763 The History of Tom Jones, a Foundling/Book IX 0 12084291 3578764 Page:Shakespeare of Stratford (1926) Yale.djvu/91 104 21450 [3578765 rows x 3 columns] 写入时复制# copy_on_write添加了一个新功能( GH 46958)。写入时复制可确保以任何方式从另一个 DataFrame 或 Series 派生的任何 DataFrame 或 Series 始终表现为副本。写入时复制不允许更新除应用该方法的对象之外的任何其他对象。 可以通过以下方式启用写入时复制: pd.set_option("mode.copy_on_write", True) pd.options.mode.copy_on_write = True 或者,可以通过以下方式在本地启用写入时复制: with pd.option_context("mode.copy_on_write", True): ... 如果没有写入时复制,则在更新从此 派生的DataFrame子级时会更新 父级。DataFrameDataFrame In [19]: df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1}) In [20]: view = df["foo"] In [21]: view.iloc[0] Out[21]: 1 In [22]: df Out[22]: foo bar 0 1 1 1 2 1 2 3 1 启用写入时复制后,df 将不再更新: In [23]: with pd.option_context("mode.copy_on_write", True): ....: df = pd.DataFrame({"foo": [1, 2, 3], "bar": 1}) ....: view = df["foo"] ....: view.iloc[0] ....: df ....: 更详细的解释可以在这里找到。 其他增强功能# Series.map()arg现在当is dict 但na_action不是Noneor 'ignore'( GH 46588 )时引发 MultiIndex.to_frame()现在支持该参数allow_duplicates,并在重复标签缺失或为 False 时引发该参数(GH 45245) StringArray现在,除了字符串 和 之外,其构造函数中的参数还接受包含 nan-likes ( None, np.nan) 的数组。 (GH 40839)valuespandas.NA 改进了( GH 45218 )categories中的渲染CategoricalIndex DataFrame.plot()现在将允许subplots参数是指定列组的可迭代列表,以便列可以在同一子图中分组在一起(GH 29688)。 to_numeric()现在,当向下转换会生成无法用 float32 表示的值时,会保留 float64 数组(GH 43693) Series.reset_index()现在DataFrame.reset_index()支持这个论点allow_duplicates(GH 44410) DataFrameGroupBy.min()、、、现在支持使用关键字执行Numba ( GHSeriesGroupBy.min() 45428 )DataFrameGroupBy.max()SeriesGroupBy.max()engine read_csv()现在支持defaultdict作为dtype参数(GH 41574) DataFrame.rolling()现在Series.rolling()支持step具有固定长度窗口的参数(GH 15354) 实现了bool-dtype Index,将类似 bool-dtype 数组传递给pd.Index现在将保留booldtype 而不是转换为object(GH 45061) 实现了一个complex-dtype Index,将一个complex-dtype数组传递给pd.Index现在将保留complex dtype而不是转换为object(GH 45845) Series现在支持DataFrame按IntegerDtype位运算(GH 34463) 添加对( GH 43371 )milliseconds的现场支持DateOffset DataFrame.where()DataFrame如果填充值可以在不损失精度的情况下进行转换,则尝试保持数据类型( GH 45582) DataFrame.reset_index()现在接受一个names重命名索引名称的参数(GH 6878) concat()现在在levels给定但keys没有时引发(GH 46653) concat()现在levels在包含重复值时引发(GH 46653) 为、、、、、、、、、、、、和( GH 46560 )添加了numeric_only参数DataFrame.corr()DataFrame.corrwith()DataFrame.cov()DataFrame.idxmin()DataFrame.idxmax()DataFrameGroupBy.idxmin()DataFrameGroupBy.idxmax()DataFrameGroupBy.var()SeriesGroupBy.var()DataFrameGroupBy.std()SeriesGroupBy.std()DataFrameGroupBy.sem()SeriesGroupBy.sem()DataFrameGroupBy.quantile() 现在,当将dtype 与不分派到方法的方法一起errors.PerformanceWarning使用时,会引发A错误(GH 42613、GH 46725)string[pyarrow]pyarrow.compute 添加了validate参数DataFrame.join()(GH 46622) 为、、、、和( GH 46442 )添加了numeric_only参数Resampler.sum()Resampler.prod()Resampler.min()Resampler.max()Resampler.first()Resampler.last() timesExponentialMovingWindow现在接受的参数np.timedelta64(GH 47003) DataError, SpecificationError, SettingWithCopyError, SettingWithCopyWarning, NumExprClobberingError, UndefinedVariableError, IndexingError, , PyperclipException, PyperclipWindowsException, CSSWarning, PossibleDataLossError, ClosedFileError, IncompatibilityWarning, AttributeConflictWarning, DatabaseError, PossiblePrecisionLoss, ValueLabelTypeMismatch, InvalidColumnName,CategoricalConversionWarning现在暴露于pandas.errors( GH 27656 ) 添加了check_like参数testing.assert_series_equal()(GH 47247) 添加对扩展数组 dtypes 的支持 ( DataFrameGroupBy.ohlc()GH 37493 )SeriesGroupBy.ohlc() 允许读取压缩的 SAS 文件read_sas()(例如.sas7bdat.gz文件) pandas.read_html()现在支持从表格单元格中提取链接(GH 13141) DatetimeIndex.astype()现在支持将时区朴素索引转换为datetime64[s]、datetime64[ms]、 和datetime64[us],以及将时区感知索引转换为相应的数据类型 ( GH 47579 )datetime64[unit, tzname] Series当 dtype 为数字并提供时, reducers(例如min、max、sum、 )现在将成功运行;以前这会引发( GH 47500 )meannumeric_only=TrueNotImplementedError RangeIndex.union()如果结果值等距(GH 47557,GH 43885),现在可以返回 aRangeIndex而不是 aInt64Index DataFrame.compare()现在接受一个参数result_names以允许用户指定正在比较的左右 DataFrame 的结果名称。这是默认的'self'('other'GH 44354) DataFrame.quantile()获得了method可以接受table评估多列分位数的参数(GH 43881) Interval现在支持检查一个区间是否包含在另一个区间中(GH 46613) 添加了copy关键字Series.set_axis()和 ,DataFrame.set_axis()允许用户在新对象上设置轴,而不必复制底层数据(GH 47932) 该方法ExtensionArray.factorize()接受use_na_sentinel=False确定如何处理空值(GH 46601) 现在Dockerfile安装了用于 pandas 开发的专用pandas-dev虚拟环境,而不是使用该base环境(GH 48427) 值得注意的错误修复# 这些错误修复可能会带来显着的行为变化。 dropna=True与groupby变换一起使用# 变换是一种运算,其结果与其输入的大小相同。当结果为 aDataFrame或 时Series,还要求结果的索引与输入的索引匹配。在 pandas 1.4 中, 在组中使用DataFrameGroupBy.transform()或使用 null 值会给出错误的结果。下面的示例表明,不正确的结果要么包含不正确的值,要么结果与输入的索引不同。SeriesGroupBy.transform()dropna=True In [24]: df = pd.DataFrame({'a': [1, 1, np.nan], 'b': [2, 3, 4]}) 旧行为: In [3]: # Value in the last row should be np.nan df.groupby('a', dropna=True).transform('sum') Out[3]: b 0 5 1 5 2 5 In [3]: # Should have one additional row with the value np.nan df.groupby('a', dropna=True).transform(lambda x: x.sum()) Out[3]: b 0 5 1 5 In [3]: # The value in the last row is np.nan interpreted as an integer df.groupby('a', dropna=True).transform('ffill') Out[3]: b 0 2 1 3 2 -9223372036854775808 In [3]: # Should have one additional row with the value np.nan df.groupby('a', dropna=True).transform(lambda x: x) Out[3]: b 0 2 1 3 新行为: In [25]: df.groupby('a', dropna=True).transform('sum') Out[25]: b 0 5.0 1 5.0 2 NaN In [26]: df.groupby('a', dropna=True).transform(lambda x: x.sum()) Out[26]: b 0 5.0 1 5.0 2 NaN In [27]: df.groupby('a', dropna=True).transform('ffill') Out[27]: b 0 2.0 1 3.0 2 NaN In [28]: df.groupby('a', dropna=True).transform(lambda x: x) Out[28]: b 0 2.0 1 3.0 2 NaN 使用 to_json() 和iso_dates=True#序列化 tz-naive 时间戳 DataFrame.to_json()、Series.to_json()、 和Index.to_json() 会错误地将带有 tz-naive 时间戳的 DatetimeArrays/DatetimeIndexes 本地化为 UTC。 (GH 38760) 请注意,此补丁不会在序列化时将 tz 感知时间戳本地化为 UTC。 (相关问题GH 12997) 旧行为 In [32]: index = pd.date_range( ....: start='2020-12-28 00:00:00', ....: end='2020-12-28 02:00:00', ....: freq='1H', ....: ) ....: In [33]: a = pd.Series( ....: data=range(3), ....: index=index, ....: ) ....: In [4]: from io import StringIO In [5]: a.to_json(date_format='iso') Out[5]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}' In [6]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index Out[6]: array([False, False, False]) 新行为 In [34]: from io import StringIO In [35]: a.to_json(date_format='iso') Out[35]: '{"2020-12-28T00:00:00.000Z":0,"2020-12-28T01:00:00.000Z":1,"2020-12-28T02:00:00.000Z":2}' # Roundtripping now works In [36]: pd.read_json(StringIO(a.to_json(date_format='iso')), typ="series").index == a.index Out[36]: array([ True, True, True]) DataFrameGroupBy.value_counts 具有非分组分类列和observed=True# 调用DataFrameGroupBy.value_counts()withobserved=True会错误地删除非分组列的未观察到的类别 ( GH 46357 )。 In [6]: df = pd.DataFrame(["a", "b", "c"], dtype="category").iloc[0:2] In [7]: df Out[7]: 0 0 a 1 b 旧行为 In [8]: df.groupby(level=0, observed=True).value_counts() Out[8]: 0 a 1 1 b 1 dtype: int64 新行为 In [9]: df.groupby(level=0, observed=True).value_counts() Out[9]: 0 a 1 1 a 0 b 1 0 b 0 c 0 1 c 0 dtype: int64 向后不兼容的 API 更改# 增加了依赖项的最低版本# 更新了一些依赖项的最低支持版本。如果安装了,我们现在需要: 包裹 最低版本 必需的 改变了 麻木 1.20.3 X X mypy(开发) 0.971 X 美丽汤4 4.9.3 X 布卢斯克 1.21.0 X 瓶颈 1.3.2 X FS规范 2021.07.0 X 假设 6.13.0 X GCSFS 2021.07.0 X 金贾2 3.0.0 X lxml 4.6.3 X 努巴 0.53.1 X 数值表达式 2.7.3 X 开放式pyxl 3.0.7 X pandas-GBQ 0.15.0 X 心理咨询师2 2.8.6 X pymysql 1.0.2 X pyreadstat 1.1.2 X pyxlsb 1.0.8 X s3fs 2021.08.0 X scipy 1.7.1 X sqlalchemy 1.4.16 X 制表 0.8.9 X 阵列 0.19.0 X XLSX作家 1.4.3 X 对于可选库,一般建议使用最新版本。下表列出了当前在 pandas 开发过程中测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为受支持。 包裹 最低版本 改变了 美丽汤4 4.9.3 X 布卢斯克 1.21.0 X 瓶颈 1.3.2 X 布罗特利皮 0.7.0 快速镶木地板 0.4.0 FS规范 2021.08.0 X html5库 1.1 假设 6.13.0 X GCSFS 2021.08.0 X 金贾2 3.0.0 X lxml 4.6.3 X 绘图库 3.3.2 努巴 0.53.1 X 数值表达式 2.7.3 X 奥德菲 1.4.1 开放式pyxl 3.0.7 X pandas-GBQ 0.15.0 X 心理咨询师2 2.8.6 X 皮箭头 1.0.1 pymysql 1.0.2 X pyreadstat 1.1.2 X pytables 3.6.1 python-snappy 0.6.0 pyxlsb 1.0.8 X s3fs 2021.08.0 X scipy 1.7.1 X sqlalchemy 1.4.16 X 制表 0.8.9 X 兹数据 2022a 阵列 0.19.0 X xlrd 2.0.1 XLSX作家 1.4.3 X xlwt 1.3.0 标准 0.15.2 有关更多信息,请参阅依赖项和可选依赖项。 其他 API 更改# BigQuery I/O 方法read_gbq(),DataFrame.to_gbq()默认为 . Google 已弃用 “带外”(复制粘贴)流程。该选项计划于 2022 年 10 月停止工作。( GH 46312 )auth_local_webserver = Trueauth_local_webserver = False auth_local_webserver = False read_json()现在,当输入是以、、等结尾的字符串但不存在此类文件时,会引发FileNotFoundError(以前)。 (GH 29102)ValueError.json.json.gz.json.bz2 Timestamp以前Timedelta会筹集资金的操作OverflowError改为筹集资金OutOfBoundsDatetime或OutOfBoundsTimedelta在适当的情况下(GH 47268) read_sas()以前返回时None,现在返回空值DataFrame( GH 47410 ) DataFrame如果index或columns参数被设置,构造函数将引发(GH 47215) 弃用# 警告 在下一个主要版本 2.0 中,正在考虑几个较大的 API 更改,但不会正式弃用,例如将标准库zoneinfo而不是 设为默认时区实现pytz,支持Index所有数据类型而不是多个子类(CategoricalIndex、Int64Index等)。 ), 和更多。正在考虑的更改已记录在此 GitHub 问题中,欢迎提供任何反馈或疑虑。 使用 Int64Index 或 RangeIndex 对 Series 进行基于标签的整数切片# 在未来的版本中,使用 a或Seriesa进行整数切片将被视为基于标签,而不是位置。这将使该行为与其他行为一致(GH 45162)。Int64IndexRangeIndexSeries.__getitem__()Series.__setitem__() 例如: In [29]: ser = pd.Series([1, 2, 3, 4, 5], index=[2, 3, 5, 7, 11]) 在旧行为中,ser[2:4]将切片视为位置切片: 旧行为: In [3]: ser[2:4] Out[3]: 5 3 7 4 dtype: int64 在未来的版本中,这将被视为基于标签: 未来的行为: In [4]: ser.loc[2:4] Out[4]: 2 1 3 2 dtype: int64 要保留旧行为,请使用series.iloc[i:j].要获得未来的行为,请使用series.loc[i:j]. 对 a 进行切片DataFrame不会受到影响。 ExcelWriter属性# 的所有属性ExcelWriter之前都记录为非公开的。然而,一些第三方 Excel 引擎记录了对 ExcelWriter.book或 的访问ExcelWriter.sheets,并且用户正在利用这些属性以及可能的其他属性。以前这些属性使用起来并不安全;例如,对的修改ExcelWriter.book不会更新ExcelWriter.sheets ,反之亦然。为了支持这一点,pandas 公开了一些属性并改进了它们的实现,以便现在可以安全地使用它们。 (GH 45572) 以下属性现在是公共的并且被认为可以安全访问。 book check_extension close date_format datetime_format engine if_sheet_exists sheets supported_extensions 以下属性已被弃用。它们现在会FutureWarning 在访问时引发一个问题,并将在未来的版本中删除。用户应该意识到他们的使用被认为是不安全的,并且可能会导致意外的结果。 cur_sheet handles path save write_cells ExcelWriter有关更多详细信息,请参阅 的文档。 与和#group_keys中的变压器一起使用DataFrameGroupBy.apply()SeriesGroupBy.apply() 在 pandas 的早期版本中,如果推断传递给 DataFrameGroupBy.apply()or 的函数SeriesGroupBy.apply()是一个转换器(即结果索引等于输入索引),则and group_keys的参数将被忽略,并且组键永远不会被添加到结果。将来,当用户指定时,组键将被添加到索引中。DataFrame.groupby()Series.groupby()group_keys=True 由于和 group_keys=True的默认值,不指定变压器将引发.通过指定 可以将其静音并保留先前的行为。DataFrame.groupby()Series.groupby()group_keysFutureWarninggroup_keys=False loc用和#设置值时的就地操作iloc 大多数情况下,设置值时会DataFrame.iloc()尝试就地设置值,只有在必要时才会回退到插入新数组。在某些情况下,不遵循此规则,例如,当从具有不同 dtype 的数组中设置整列时: In [30]: df = pd.DataFrame({'price': [11.1, 12.2]}, index=['book1', 'book2']) In [31]: original_prices = df['price'] In [32]: new_prices = np.array([98, 99]) 旧行为: In [3]: df.iloc[:, 0] = new_prices In [4]: df.iloc[:, 0] Out[4]: book1 98 book2 99 Name: price, dtype: int64 In [5]: original_prices Out[5]: book1 11.1 book2 12.2 Name: price, float: 64 此行为已被弃用。在未来的版本中,使用 iloc 设置整个列将尝试就地操作。 未来的行为: In [3]: df.iloc[:, 0] = new_prices In [4]: df.iloc[:, 0] Out[4]: book1 98.0 book2 99.0 Name: price, dtype: float64 In [5]: original_prices Out[5]: book1 98.0 book2 99.0 Name: price, dtype: float64 要获得旧行为,请DataFrame.__setitem__()直接使用: In [3]: df[df.columns[0]] = new_prices In [4]: df.iloc[:, 0] Out[4] book1 98 book2 99 Name: price, dtype: int64 In [5]: original_prices Out[5]: book1 11.1 book2 12.2 Name: price, dtype: float64 df.columns要在 不唯一并且想要通过索引更改单个列时获得旧行为,可以使用DataFrame.isetitem(),它已在 pandas 1.5 中添加: In [3]: df_with_duplicated_cols = pd.concat([df, df], axis='columns') In [3]: df_with_duplicated_cols.isetitem(0, new_prices) In [4]: df_with_duplicated_cols.iloc[:, 0] Out[4]: book1 98 book2 99 Name: price, dtype: int64 In [5]: original_prices Out[5]: book1 11.1 book2 12.2 Name: 0, dtype: float64 numeric_only默认值# 在DataFrame、DataFrameGroupBy、和Resampler等操作 中,参数的默认值min(如果存在)是不一致的。此外,使用默认值进行操作可能会导致令人惊讶的结果。 (GH 46560)sumidxmaxnumeric_onlyNone In [1]: df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"]}) In [2]: # Reading the next line without knowing the contents of df, one would # expect the result to contain the products for both columns a and b. df[["a", "b"]].prod() Out[2]: a 2 dtype: int64 为了避免这种行为,指定值numeric_only=None已被弃用,并将在 pandas 的未来版本中删除。将来,所有带参数的操作numeric_only都将默认为False.用户应该仅对可操作的列调用该操作,或者指定numeric_only=True仅对布尔型、整数和浮点型列进行操作。 为了支持向新行为的过渡,以下方法获得了争论numeric_only。 DataFrame.corr() DataFrame.corrwith() DataFrame.cov() DataFrame.idxmin() DataFrame.idxmax() DataFrameGroupBy.cummin() DataFrameGroupBy.cummax() DataFrameGroupBy.idxmin() DataFrameGroupBy.idxmax() DataFrameGroupBy.var() DataFrameGroupBy.std() DataFrameGroupBy.sem() DataFrameGroupBy.quantile() Resampler.mean() Resampler.median() Resampler.sem() Resampler.std() Resampler.var() DataFrame.rolling()运营 DataFrame.expanding()运营 DataFrame.ewm()运营 其他弃用# 已弃用andline_terminator中的关键字,改用;这是为了与标准库“csv”模块(GH 9568)保持一致DataFrame.to_csv()Series.to_csv()lineterminatorread_csv() 传递非稀疏 时,已弃用SparseArray.astype()、Series.astype()和DataFrame.astype()with的行为。在未来的版本中,这将转换为非稀疏数据类型,而不是将其包装在( GH 34457 )SparseDtypedtypeSparseDtype DatetimeIndex.intersection()已弃用和的行为DatetimeIndex.symmetric_difference()(union该行为在版本 1.3.0 中已弃用),具有混合时区;在未来的版本中,两者都将转换为 UTC 而不是对象数据类型(GH 39328、GH 45357) 已弃用DataFrame.iteritems(), Series.iteritems(),HDFStore.iteritems()改为DataFrame.items(), Series.items(), HDFStore.items()( GH 45321 ) 已弃用Series.is_monotonic()并Index.is_monotonic()支持Series.is_monotonic_increasing()和Index.is_monotonic_increasing()(GH 45422、GH 21335) 转换为除 之外的整数数据类型时,已弃用DatetimeIndex.astype(),的行为。在未来的版本中,它们将精确地转换为指定的数据类型(而不是始终),并且如果转换溢出(GH 45034),则会引发异常TimedeltaIndex.astype()PeriodIndex.astype()int64int64 弃用了__array_wrap__DataFrame 和 Series 的方法,改为依赖标准 numpy ufuncs ( GH 45451 ) 当与时区一起传递到Seriesor DatetimeIndex( GH 45573 )时,不建议将 float-dtype 数据视为 wall-time 弃用了 dtypeSeries.fillna()和不兼容的填充值的行为;在未来的版本中,这将转换为通用数据类型(通常是对象),而不是提升,匹配其他数据类型的行为(GH 45746)DataFrame.fillna()timedelta64[ns] 已弃用( GH 45947 )warn中的参数infer_freq() ExtensionArray.argsort()已弃用( GH 46134 )中允许非关键字参数 已弃用将 all-bool object-dtype 列视为 bool 型 inDataFrame.any()和DataFrame.all()with bool_only=True,而是显式转换为 bool ( GH 46188 ) DataFrame.quantile()方法、属性的弃用行为numeric_only将默认为 False。在结果中包括 datetime/timedelta 列 ( GH 7308 )。 已弃用Timedelta.freq和Timedelta.is_populated( GH 46430 ) 已弃用Timedelta.delta(GH 46476) 不推荐将参数作为DataFrame.any()and中的位置传递Series.any()(GH 44802) 已弃用将位置参数传递给DataFrame.pivot()和pivot()except data( GH 30228 ) 已弃用方法DataFrame.mad()、Series.mad()和相应的 groupby 方法(GH 11787) Index.join()不推荐使用except for 的位置参数other,使用仅关键字参数而不是位置参数 ( GH 46518 ) 已弃用 的位置参数(StringMethods.rsplit()除StringMethods.split()之外)pat,使用仅关键字参数而不是位置参数 ( GH 47423 ) 不推荐DatetimeIndex使用表示时区感知日期时间的字符串在时区朴素上建立索引(GH 46903,GH 36148) 已弃用允许unit="M"或unit="Y"在Timestamp构造函数中使用非圆浮点值(GH 47267) 已弃用display.column_space全局配置选项 ( GH 7576 ) 弃用了、和na_sentinel中的参数; pass而不是使用NaN 值的哨兵,而不是对 NaN 值进行编码(GH 46910)factorize()Index.factorize()ExtensionArray.factorize()use_na_sentinel=True-1use_na_sentinel=Falsena_sentinel=None 不建议DataFrameGroupBy.transform()在 UDF 返回 DataFrame 时不对齐结果 ( GH 45648 ) to_datetime()澄清了无法根据指定参数解析分隔日期时的警告dayfirst(GH 46210) to_datetime()当分隔日期无法根据指定参数进行解析时发出警告dayfirst,即使对于省略前导零的日期也是如此(例如31/1/2001)(GH 47880) 已弃用Series,并且当 dtype 为非数字且已提供时, Resamplerreducers(例如min、max、sum、mean)会引发 a ;这将在未来版本中提出( GH 47500 )NotImplementedErrornumeric_only=TrueTypeError Series.rank()当 dtype 为非数字且numeric_only=True已提供时,不推荐返回空结果;这将TypeError在未来版本中提出( GH 47500 ) errors已弃用的Series.mask()、Series.where()、DataFrame.mask()和DataFrame.where()as参数errors对此方法没有影响 ( GH 47728 ) 已弃用的参数*args和**kwargsin Rolling、Expanding和ExponentialMovingWindowops。 (GH 47836) 已弃用, , andinplace中的关键字( GH 37643 )Categorical.set_ordered()Categorical.as_ordered()Categorical.as_unordered() 已弃用使用 来设置分类的类别,请改用 ( GH 37643 )cat.categories = ['a', 'b', 'c']Categorical.rename_categories() 弃用了and中未使用的参数encodingand ( GH 47912 )verboseSeries.to_excel()DataFrame.to_excel() 已弃用andinplace中的关键字,改用( GH 48130 )DataFrame.set_axis()Series.set_axis()obj = obj.set_axis(..., copy=False) 不推荐在迭代 aDataFrameGroupBy或SeriesGroupBy已按长度 1 的列表分组的 a 时生成单个元素;将返回长度为 1 的元组 ( GH 42795 ) 修复了弃用公共方法的警告消息MultiIndex.lesort_depth(),如之前提到的消息MultiIndex.is_lexsorted()(GH 38701) 弃用了and ( GH 47563sort_columns )中的参数。DataFrame.plot()Series.plot() 除第一个参数之外的所有位置参数均已弃用DataFrame.to_stata(),read_stata()请改用关键字参数(GH 48128)。 弃用了、和mangle_dupe_cols中的参数。该参数从未实现,并且将添加一个可以指定重命名模式的新参数(GH 47718)read_csv()read_fwf()read_table()read_excel() 已弃用允许dtype='datetime64'或,使用“datetime64[ns]”代替(dtype=np.datetime64GH 47844)Series.astype() 性能改进# 当 other 为( GH 46174 )DataFrame.corrwith()时,按列 (axis=0) Pearson 和 Spearman 相关性的性能改进Series DataFrameGroupBy.transform()某些SeriesGroupBy.transform()用户定义的 DataFrame -> Series 函数的性能改进( GH 45387) DataFrame.duplicated()当子集仅包含一列时的性能改进( GH 45236) DataFrameGroupBy.diff()和SeriesGroupBy.diff()( GH 16706 )的性能改进 广播用户定义函数的值时的DataFrameGroupBy.transform()性能改进( GH 45708)SeriesGroupBy.transform() 当仅存在单个组时,用户定义函数的性能得到改进DataFrameGroupBy.transform()(GH 44977)SeriesGroupBy.transform() 在非唯一未排序索引上进行分组时DataFrameGroupBy.apply()的性能改进( GH 46527)SeriesGroupBy.apply() DataFrame.loc()基于Series.loc()元组的索引的性能改进MultiIndex(GH 45681、GH 46040、GH 46330) 性能DataFrameGroupBy.var()改进(GHSeriesGroupBy.var() 48152 )ddof DataFrame.to_records()当索引为 a 时的性能改进MultiIndex( GH 47263 ) MultiIndex.values当 MultiIndex 包含 DatetimeIndex、TimedeltaIndex 或 ExtensionDtypes 类型级别时的性能改进( GH 46288) merge()当左侧和/或右侧为空时的性能改进( GH 45838) DataFrame.join()当左侧和/或右侧为空时的性能改进( GH 46015) 目标为( GH 46235 )DataFrame.reindex()时的性能改进Series.reindex()MultiIndex 在 pyarrow 支持的字符串数组中设置值时的性能改进(GH 46400) factorize()( GH 46109 )的性能改进 扩展 dtype 标量的性能改进DataFrame和构造函数 ( GH 45854 )Series read_excel()提供参数时的性能改进nrows(GH 32727) Styler.to_excel()应用重复 CSS 格式时的性能改进( GH 47371 ) 性能改进MultiIndex.is_monotonic_increasing()( GH 47458 ) BusinessHour str和repr( GH 44764 )的性能改进 使用默认 strftime格式之一时,日期时间数组字符串格式的性能得到改进。 (GH 44764)"%Y-%m-%d %H:%M:%S""%Y-%m-%d %H:%M:%S.%f" 处理时间数组时Series.to_sql()和DataFrame.to_sql()( )的性能改进。 SQLiteTable(GH 44764) 性能改进至read_sas()( GH 47404 ) ( GH 34197 )中的性能argmax改进argminarrays.SparseArray Bug修复# 分类# 不接受整数数据类型的错误Categorical.view()(GH 25464) CategoricalIndex.union()当索引的类别为整数 dtype 并且索引包含NaN错误地提升而不是转换为的值时出现错误float64(GH 45362) concat()连接两个(或更多)无序CategoricalIndex变量(其类别是排列)时出现错误,会产生不正确的索引值( GH 24845) 类似日期时间# DataFrame.quantile()类似日期时间的数据类型存在错误,并且没有行错误地返回float64数据类型,而不是保留类似日期时间的数据类型(GH 41544) to_datetime()对象序列错误地引发错误np.str_(GH 32264) Timestamp将日期时间组件作为位置参数和tzinfo关键字参数传递时错误地引发构造错误( GH 31929) Index.astype()从对象 dtype 转换为timedelta64[ns]dtype 时错误地将值转换为np.datetime64("NaT")而np.timedelta64("NaT")不是提升 ( GH 45722 ) SeriesGroupBy.value_counts()传递分类列时索引中的错误( GH 44324) 本地化到 UTC时出现错误DatetimeIndex.tz_localize(),无法复制基础数据 ( GH 46460 ) DatetimeIndex.resolution()对于纳秒分辨率索引,错误地返回“天”而不是“纳秒”(GH 46903) 错误地Timestamp使用整数或浮点值和unit="Y"/或unit="M"给出稍微错误的结果(GH 47266) DatetimeArray当传递另一个数组DatetimeArray并freq=None错误地从给定数组推断频率时,构造中存在错误( GH 47296) 即使行数超过 50 行,to_datetime()也会OutOfBoundsDatetime抛出错误( GH 45319)errors=coerce DateOffset将 a 添加到 a时的错误Series不会添加该nanoseconds字段(GH 47856) 时间增量# astype_nansafe()当包含 np.nan 时,astype(“timedelta64[ns]”)中的错误会失败 ( GH 45798 ) Timedelta使用对象构造 a 时出现错误np.timedelta64,unit有时会默默溢出并返回错误结果而不是引发OutOfBoundsTimedelta(GH 46827) Timedelta从大整数或浮点数构造 a 时出现错误,unit="W"并无提示地溢出并返回错误结果而不是引发OutOfBoundsTimedelta(GH 47268) 时区# Timestamp传递 tzinfo 对象时构造函数中的错误ZoneInfo(GH 46425) 数字# 类似数组的操作中的错误dtype="boolean"以及NA错误地就地更改数组(GH 45421) 可空类型的算术运算中的错误,NA其值与不可空类型的相同运算不匹配(GH 48223) 当除以floordiv返回而IntegerDtype 0不是返回时出现错误(GH 48223)0inf 除法中的错误,pow以及mod类似数组的操作与dtype="boolean"它们的对应项不同np.bool_(GH 46063) Series将 a与dtype类似的数组相乘时的IntegerDtype错误会错误地引发(GH 45622)FloatingDtypetimedelta64[ns] mean()可选依赖项bottleneck导致数组长度线性精度损失的错误。bottleneck已被禁用以mean()改善对数线性损失,但可能会导致性能下降。 (GH 42878) 转换# 不保留子类的错误DataFrame.astype()(GH 40810) Series从包含浮点数的列表或类似 ndarray 的浮动数据类型(例如)和整数数据类型构建 a 时出现错误dask.Array,而不是像我们使用np.ndarray( GH 40110 )那样进行强制转换 无Float64Index.astype()符号整数 dtype 错误地转换为np.int64dtype ( GH 45309 ) Series.astype()浮动数据类型和无符号整数数据类型之间的错误DataFrame.astype()在存在负值时无法引发(GH 45151) array()包含FloatingDtypefloat-castable 字符串的 和 值错误地引发错误( GH 45424) 比较字符串和 datetime64ns 对象时出现错误,导致OverflowError异常。 (GH 45506) 通用抽象数据类型的元类中的错误导致DataFrame.apply()并Series.apply()引发内置函数type(GH 46684) DataFrame.to_records()如果索引是 a MultiIndex( GH 47263 ),则返回不一致的 numpy 类型的错误 错误DataFrame.to_dict()或未返回本机类型(orient="list"GH 46751)orient="index" 当应用于空和时DataFrame.apply()返回 aDataFrame而不是 a 的错误(GH 39111)SeriesDataFrameaxis=1 从不是由所有 NumPy 无符号整数标量组成的NumPy 的可迭代推断 dtype 时出现的错误ndarray不会导致无符号整数 dtype ( GH 47294 ) DataFrame.eval()当 pandas 对象(例如'Timestamp')是列名称时出现错误( GH 44603) 字符串# 使用其他系列作为参数时str.startswith()出现错误_pat_。str.endswith()现在加薪TypeError( GH 3485 ) 当字符串包含前导符号时出现错误Series.str.zfill(),在符号字符之前填充“0”,而不是像str.zfill标准库中那样在符号字符之后填充“0”(GH 20868) 间隔# 设置为整数支持的数组IntervalArray.__setitem__()时出现错误,而不是(GH 45484)np.nanValueErrorTypeError IntervalDtype使用 datetime64[ns, tz] 作为 dtype 字符串时出现的错误( GH 46999 ) 索引# DataFrame.iloc()使用单个 ExtensionDtype列对单个行进行索引时给出的错误DataFrame是提供副本而不是基础数据的视图 ( GH 45241 ) 即使选择了唯一列,DataFrame.__getitem__()当具有重复列时返回副本时也会出现错误( GH 45316、GH 41062)DataFrame 当两个 MultiIndexes 交集相同时,Series.align()不会创建级别的并集错误( GH 45224 )MultiIndex 将 NA 值(None或np.nan)设置为Series基于 int 的IntervalDtype错误转换为对象数据类型而不是基于 float 的错误IntervalDtype(GH 45568) 将设置值索引到具有相同数据类型的ExtensionDtype列时出现错误,因为错误地插入新数组而不是就地设置(GH 33457)df.iloc[:, i] = valuesvaluesdf.iloc[:, i] 当使用整数键设置一个无法在引发 a 的位置设置的值而不是转换为通用数据类型时,出现Series.__setitem__()非整数错误( GH 45070)IndexValueError 将值设置为列表时DataFrame.loc()未强制转换None的错误(GH 47987)NADataFrame Series.__setitem__()在使用布尔掩码进行索引时将不兼容的值设置为PeriodDtype或引发时出现错误IntervalDtype Series,但在使用其他等效索引器进行索引时进行强制转换;这些现在始终如一地强制,以及Series.mask()(Series.where()GH 45768) 具有类似日期时间的数据类型的多个列中的错误DataFrame.where()无法向下转换与其他数据类型一致的结果(GH 45837) isin()向上转换float64为无符号整数 dtype 和没有 dtype 的类似列表的参数时出现错误( GH 46485 ) 在不使用(GH 13831)的情况下使用多个键时出现错误Series.loc.__setitem__()并且不会引发错误Series.loc.__getitem__()MultiIndex 指定何时Index.reindex()提出但未给出的错误;现在忽略级别(GH 35132)AssertionErrorlevelMultiIndex 当为 dtype 设置太大的值时Series无法强制转换为常见类型时出现错误(GH 26049、GH 32878) loc.__setitem__()将range键视为位置而不是基于标签的错误( GH 45479) DataFrame.__setitem__()使用标量键和DataFrame值进行设置时,将扩展数组 dtypes 转换为对象时出现错误( GH 46896) 将标量设置为可为空的 pandas dtype 时出现的错误,如果标量无法(无损)转换为可为空的类型,Series.__setitem__()则不会引发 a ( GH 45404 )TypeError Series.__setitem__()设置包含错误提升而不是转换为dtype 的booleandtype 值时出现的错误( GH 45462 )NAboolean 使用包含何时不匹配的Series.loc()布尔索引器引发的错误( GH 46551)NAIndex Series.__setitem__()设置NA为 numeric-dtype时Series会错误地向上转换为 object-dtype 而不是将值视为np.nan( GH 44199 ) DataFrame.loc()将值设置为列且右侧是字典时出现错误( GH 47216) dtype 、全布尔Series.__setitem__()掩码和不兼容的值错误地转换为而不是保留dtype ( GH 45967 )datetime64[ns]Falseobjectdatetime64[ns] 当索引器来自布尔数据类型(GH 45806)时Index.__getitem__()引发错误ValueErrorNA Series.__setitem__()使用标量放大时丢失精度的错误Series(GH 32346) Series.mask()使用inplace=True布尔掩码或设置值时出现错误,小整数数据类型错误地引发( GH 45750) 错误DataFrame.mask()和列错误inplace=True地ExtensionDtype提升(GH 45577) 从具有类似日期时间值的对象 dtype 行索引的 DataFrame 获取列时出现错误:结果系列现在保留来自父 DataFrame 的确切对象 dtype 索引(GH 42950) 如果列具有dtype,则DataFrame.__getattribute__()引发错误(GH 46185)AttributeError"string" 比较扩展数组 dtype 和 numpy dtype 时DataFrame.compare()返回所有列的错误( GH 44014)NaN DataFrame.where()使用 numpy dtype 的掩码设置错误值时出现错误"boolean"(GH 44014) 错误地在密钥上建立索引时出现错误DatetimeIndex(np.str_GH 45580) CategoricalIndex.get_indexer()当索引包含值时出现错误NaN,导致目标中但不存在于索引中的元素映射到 NaN 元素的索引,而不是 -1 ( GH 45361 ) 将大整数值设置为Serieswithfloat32或float16dtype 时出现错误,错误地更改了这些值而不是强制为float64dtype ( GH 45844 ) 错误并将Series.asof()bool DataFrame.asof()-dtype 结果错误地转换为float64dtype ( GH 16063 ) 错误NDFrame.xs(),DataFrame.iterrows()并且DataFrame.loc()并不DataFrame.iloc()总是传播元数据(GH 28283) DataFrame.sum()如果输入包含 NaN,min_count中的错误会更改 dtype( GH 46947) 该错误IntervalTree导致无限递归。 (GH 46658) 在索引上时PeriodIndex引发错误,而不是放在其位置上。 (GH 46673)AttributeErrorNANaT 错误DataFrame.at()将允许修改多个列(GH 48296) 丢失的# 在某些不存在 NA 值的情况下,Series.fillna()and DataFrame.fillna()with关键字不被遵守的错误( GH 45423)downcast 错误Series.fillna()和DataFrame.fillna()不IntervalDtype兼容的值提升而不是转换为通用(通常是对象)dtype(GH 45796) 如果映射器是or ( GH 47527 ),Series.map()则不尊重参数的错误na_actiondictSeries object-dtype 列中的错误DataFrame.interpolate()未返回副本inplace=False(GH 45791) 错误DataFrame.dropna()允许设置两个参数how和thresh不兼容的参数(GH 46575) 当是单块时DataFrame.fillna()被忽略的错误( GH 47713)axisDataFrame 多重索引# 使用负步长和非空开始/停止值对DataFrame.loc()a 进行切片时返回空结果的错误( GH 46156 )MultiIndex 使用除 -1 以外的负步长DataFrame.loc()进行切片时引发的错误( GH 46156 )MultiIndex DataFrame.loc()以负步长切片 aMultiIndex并切片非 int 标记索引级别时引发的错误( GH 46156 ) 当提供Series.to_numpy()an 时,多索引系列无法转换为 numpy 数组的错误( GH 45774)na_value MultiIndex.equals当只有一侧具有扩展数组 dtype 时不可交换的错误( GH 46026) 错误MultiIndex.from_tuples()无法构造空元组索引(GH 45608) 输入/输出# 如果包含( GH 45350 ),DataFrame.to_stata()则不会引发错误的错误DataFrame-np.inf read_excel()某些可调用项会导致无限循环中的错误skiprows(GH 45585) DataFrame.info()在空调用时省略输出末尾的新行的错误DataFrame( GH 45494 ) 无法识别forread_csv()换行符的错误( GH 41710 )on_bad_lines="warn"engine="c" DataFrame.to_csv()不尊重dtypefloat_format的错误Float64(GH 45991) read_csv()在所有情况下都不尊重索引列的指定转换器的错误( GH 40589) 即使在(GH 46569)时,也read_csv()将第二行解释为Index名称时出现错误index_col=False read_parquet()当engine="pyarrow"传递不支持的数据类型列时导致部分写入磁盘时出现错误( GH 44914) 将空 DataFrame 写入文件时会出现DataFrame.to_excel()错误(GH 45793)ExcelWriter.ods read_csv()忽略不存在的标题行engine="python"(GH 47400)的错误 当引用不存在的行时read_excel()引发不受控制的错误( GH 43143)IndexErrorheader read_html()周围元素<br>连接时没有空格的错误( GH 29528) 当数据比标头长时出现错误read_csv(),导致usecols预期字符串中的可调用问题(GH 46997) 带有子类型的 Interval dtype 的 Parquet 往返中存在错误datetime64[ns]( GH 45881 ) read_excel()读取.odsxml 元素之间带有换行符的文件时出现错误( GH 45598 ) 当文件因错误而未关闭read_parquet()时出现错误( GH 46555)engine="fastparquet" DataFrame.to_html()现在,当关键字设置为时,会border从<table>元素中排除该属性。borderFalse read_sas()某些类型的压缩 SAS7BDAT 文件存在错误( GH 35545 ) 未给出姓名时read_excel()不向前填充的错误( GH 47487)MultiIndex read_sas()对于零行的 SAS7BDAT 文件,返回None而不是空 DataFrame中的错误( GH 18198 ) DataFrame.to_string()在扩展数组中使用错误的缺失值的错误MultiIndex(GH 47986) StataWriter始终使用默认编码写入值标签的错误( GH 46750) StataWriterUTF8从变量名称中删除一些有效字符的错误( GH 47276) 使用(GH 19543)DataFrame.to_excel()写入空数据框时出现错误MultiIndex read_sas()包含 0x40 控制字节的 RLE 压缩 SAS7BDAT 文件中的错误( GH 31243 ) read_sas()乱序列名中的错误( GH 31243) read_sas()包含 0x00 控制字节的 RLE 压缩 SAS7BDAT 文件中的错误( GH 47099 ) 返回 dtype 而不是可为 null 的dtype 时read_parquet()出现错误(GH 45694)use_nullable_dtypes=Truefloat64Float64 当使用(GH 44720)读回时,DataFrame.to_json()其中的错误PeriodDtype不会进行序列化往返read_json() read_xml()读取带有中文字符标签的 XML 文件时出现错误,并会引发错误XMLSyntaxError( GH 47902 ) 时期# 返回错误结果Period中的减法错误( GH 45999)PeriodArray Period.strftime()和中的错误PeriodIndex.strftime(),指令%l和%u给出了错误的结果(GH 46252) freq将字符串传递到Period1000 倍数的微秒时推断错误的错误( GH 46811 ) Period从 aTimestamp或np.datetime64具有非零纳秒的对象构造 a并freq="ns"错误地截断纳秒时出现错误 ( GH 46811 ) 添加到具有类似 timedelta 的频率的错误错误地提高而不是返回(GH 47196)np.timedelta64("NaT", "ns")PeriodIncompatibleFrequencyNaT 将整数数组添加到数组PeriodDtype时出现错误(GH 47209)dtype.freq.n > 1 Period从数组中减go a 时PeriodDtype返回错误结果而不是OverflowError在操作溢出时引发的错误(GH 47538) 绘图# 错误DataFrame.plot.barh()阻止标记 x 轴并xlabel更新 y 轴标签 ( GH 45144 ) DataFrame.plot.box()阻止标记 x 轴的错误( GH 45463) DataFrame.boxplot()阻止传入的xlabel错误(ylabelGH 45463) DataFrame.boxplot()阻止指定的错误vert=False(GH 36918) DataFrame.plot.scatter()阻止指定的错误norm(GH 45809) Series.plot()修复未设置 ylabel 时将“None”显示为 ylabel ( GH 46129 ) 该错误DataFrame.plot()导致绘制季度系列时 xticks 和垂直网格放置不当(GH 47602) 错误在于DataFrame.plot()阻止设置辅助 y 轴的 y 轴标签、限制和刻度(GH 47753) 分组/重新采样/滚动# DataFrame.resample()忽略错误(GHclosed="right" 45414 )TimedeltaIndex 当输入 DataFrame 有多个列时,错误DataFrameGroupBy.transform()会失败( GH 27469)func="size" Bug inDataFrameGroupBy.size()和DataFrameGroupBy.transform()withfunc="size"产生了不正确的结果axis=1(GH 45715) ExponentialMovingWindow.mean()当列数多于行数axis=1时出现错误( GH 46086)engine='numba'DataFrame 使用时的错误engine="numba"会在修改时返回相同的 jitted 函数engine_kwargs(GH 46086) DataFrameGroupBy.transform()当axis=1andfunc是"first"or "last"( GH 45986 )时错误失败 DataFrameGroupBy.cumsum()给出错误结果的错误skipna=False(GH 46216) DataFrameGroupBy.sum()、SeriesGroupBy.sum()、DataFrameGroupBy.prod()、.DataFrameGroupBy.cumsum`中的错误,以及整数 dtypes 丢失精度 ( GH 37493 )SeriesGroupBy.prod, :meth:()SeriesGroupBy.cumsum() DataFrameGroupBy.cumsum()dtype中SeriesGroupBy.cumsum()的错误timedelta64[ns]无法识别NaT为空值(GH 46216) 当总和大于数据类型的最大值时,整数数据类型中的错误会导致溢出DataFrameGroupBy.cumsum()(GH 37493)SeriesGroupBy.cumsum() DataFrameGroupBy.cummin()、SeriesGroupBy.cummin()和中DataFrameGroupBy.cummax()的错误SeriesGroupBy.cummax()可空数据类型错误地更改了原始数据 ( GH 46220 ) 处于第一级DataFrame.groupby()时引发错误的错误( GH 47348 )NoneMultiIndex DataFrameGroupBy.cummax()dtype中SeriesGroupBy.cummax()的错误int64,其主值为尽可能小的 int64 ( GH 46382 ) 错误DataFrameGroupBy.cumprod()并影响不同列中的计算(GH 48064)SeriesGroupBy.cumprod() NaNskipna=False 空组和DataFrameGroupBy.max()数据类型错误地引发错误(GH 46408)SeriesGroupBy.max()uint64RuntimeError 当提供字符串和 args 或 kwargs时出现错误DataFrameGroupBy.apply()并且SeriesGroupBy.apply()会失败( GH 46479)func SeriesGroupBy.apply()当存在唯一组时,错误会错误地命名其结果( GH 46369) 错误Rolling.sum()并且Rolling.mean()会在具有相同值的窗口中给出不正确的结果(GH 42064,GH 46431) 错误Rolling.var()并且Rolling.std()会在具有相同值的窗口中给出非零结果(GH 42064) 错误Rolling.skew()并且Rolling.kurt()会给出具有相同值的窗口的 NaN ( GH 30993 ) Rolling.var()当窗口大小大于数据大小时,计算加权方差时会出现段错误( GH 46760) 未包含Grouper.__repr__()其中的错误。dropna现在是(GH 46754) DataFrame.rolling()当指定 center=True、axis=1 和 win_type 时,错误会给出 ValueError ( GH 46135 ) 错误DataFrameGroupBy.describe()并SeriesGroupBy.describe()为空数据集产生不一致的结果(GH 41575) DataFrame.resample()减少方法中的错误与使用时on会尝试聚合提供的列(GH 47079) 当输入 DataFrame/Series 在( GH 46783 )中具有 NaN 值时,出现错误DataFrame.groupby()并且Series.groupby()不会尊重dropna=FalseMultiIndex 从缺少重采样密钥的密钥列表获取结果时会DataFrameGroupBy.resample()引发错误( GH 47362)KeyError DataFrame.groupby()当 DataFrame 为空进行转换时,错误会丢失索引列,例如 fillna ( GH 47787 ) DataFrame.groupby()和Series.groupby()with中的错误会将任何空组放在末尾,而不是按照它们遇到的顺序(dropna=FalseGH 46584)sort=False 重塑# 具有整数 dtype 的错误与具有整数类别并包含转换为对象 dtype 的值(GH 45359)concat()之间的错误SeriesCategoricalDtypeNaNfloat64 get_dummies()所选对象和分类数据类型中存在错误,但字符串中没有错误( GH 44965) 将 a与 a与另一个DataFrame.align()对齐时出现错误( GH 46001 )MultiIndexSeriesMultiIndex IntegerDtype与, 或数组串联时出现错误FloatingDtype,其中生成的 dtype 未反映不可为 null 的 dtype 的行为 ( GH 46379 ) 当和( GH 47329 )concat()时丢失列的 dtype 的错误join="outer"sort=True 包含concat()时不对列名称进行排序的错误( GH 47331)None 使用相同密钥的错误concat()会导致索引时出错MultiIndex(GH 46519) 当聚合列具有扩展数组 dtype时pivot_table()引发错误( GH 47477)TypeErrordropna=True 在 ssl 库中使用模式时merge()引发错误的错误( GH 48024 )how="cross"FIPS DataFrame.join()使用后缀连接具有重复列名的 DataFrame 时出现列表错误( GH 46396 ) 排序索引中的结果DataFrame.pivot_table()出现错误( GH 17041)sort=False 错误在于生成的索引是 a而不是 a 的concat()时间axis=1和地点(GH 46675)sort=FalseInt64IndexRangeIndex wide_to_long()当stubnames列中缺失且i包含字符串 dtype 列时,会引发错误( GH 46044) DataFrame.join()分类索引中的错误会导致意外的重新排序( GH 47812) 稀疏# 错误Series.where()并DataFrame.where()未能SparseDtype保留阵列的fill_value(GH 45691) 错误SparseArray.unique()无法保持原始元素顺序(GH 47809) 扩展数组# 执行操作时出现错误IntegerArray.searchsorted()并返回不一致的结果(GH 45255)FloatingArray.searchsorted()np.nan 造型器# 尝试将样式函数应用于空 DataFrame 子集时出现错误 ( GH 45313 ) CSSToExcelConverter导致在没有为引擎TypeError提供边框样式的情况下提供边框颜色时出现错误( GH 42276)xlsxwriter Styler.set_sticky()在深色模式下导致白色背景上出现白色文本的错误( GH 46984 ) Styler.to_latex()导致UnboundLocalError何时clines="all;data"且DataFrame没有行的错误。 (GH 47203) 与引擎一起Styler.to_excel()使用时出现错误(GH 30107)vertical-align: middle;xlsxwriter 将样式应用到带有布尔列标签的 DataFrame 时出现错误 ( GH 47838 ) 元数据# DataFrame.melt()修复了( GH 28283 )中的元数据传播 DataFrame.explode()修复了( GH 28283 )中的元数据传播 其他# 错误地使用assert_index_equal()而不names=True检查check_order=False名称(GH 47328) 贡献者# 共有 271 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 阿达什·阿查里亚 + 阿达什-阿查里亚 + 阿迪·马尼瓦南 + 亚当·鲍登 阿迪亚·阿加瓦尔 + 艾哈迈德·易卜拉欣 + 阿拉斯泰尔·波特+ 亚历克斯·波维尔 + 亚历克斯-布莱德 亚历山德拉·斯科凯蒂 + 阿隆·门泽 + 安德拉斯·迪克 + 安德鲁·豪鲁克 安迪·格里格 + 阿内塔·卡列奥娃 + 安东尼·吉文斯 + 安东·舍夫佐夫 + BJ 波特 + 巴科特贝耶纳 + 本·比斯利 + 本·沃兹尼亚克 + 伯恩哈德·瓦格纳 + 鲍里斯·鲁缅采夫 布莱恩·戈洛普 + CCXXXI + 钱德拉塞卡兰·阿尼鲁德·巴德瓦吉 + 查尔斯·布莱克蒙-卢卡 + 克里斯·莫拉迪 + 克里斯·阿尔伯特森 + 康普罗·普拉萨德 + 达Py15 达米安·巴拉邦科夫 + 丹尼尔一世 + 丹尼尔·艾萨克 + 丹尼尔·施密特 丹尼尔·亚先科 + 戴尔·阿德乌米 丹尼斯·楚昆塔 + 丹尼斯·J·格雷 + 德里克·夏普 + 德鲁夫·桑达尼 + 迪米特拉·卡拉迪玛 + 德米特里·萨沃斯蒂亚诺夫 + 德米特罗·李特维诺夫 + 金道英 + 德里斯·肖蒙 + 黄爱德华 + 埃里克+ 叶卡捷琳娜+ 伊莱·多拉多 + 埃兹拉·布劳纳 + 法比安·加贝尔 + 因式分解D + 李芳辰 弗朗西斯科·罗曼迪尼 + 格雷格·甘登伯格 + 郭慈+ 小笠原宏明 胡德·查塔姆 + 伊恩·亚历山大·乔伊纳 + 欧夫·勒斯蒂格 吴伊万 + JHM 达比郡 JHM 达比郡 (MBP) JHM 达比郡 (iMac) 伯利 杰克·戈德史密斯 + 詹姆斯·弗里曼 + 詹姆斯·兰姆 詹姆斯·莫罗 + 贾诺什·里伯塞尔 贾罗德·米尔曼 贾森+ 杰夫·雷巴克 杰里米·图卢普 + 约翰内斯·米勒 约翰·本西纳 + 约翰·曼蒂奥斯 + 约翰·赞格威尔 乔恩·布拉姆利 + 乔纳斯·哈格 乔丹·希克斯 乔里斯·范登博什 何塞·奥尔蒂斯 + 约瑟夫·帕拉姆帕图 + 何塞·杜阿尔特 朱利安·斯蒂格 + 凯·牧师 + 卡皮尔·E·艾耶 + 卡蒂克·韦拉尤瑟姆 + 卡西夫·汗 井盖一树+ 凯文·简·安克 + 凯文·谢泼德 许增伟 基安·埃利亚西 基安S+ 金权贤 + 金扎拉扎 + 康杰蒂·马鲁蒂 + 莱昂纳多·陈 丛林晓 + 卢伊克·埃斯特夫 卢卡斯G0+ 露西·希门尼斯 + 路易斯·平托 卢克·曼利 马克·加西亚 马可·爱德华·戈雷利 马可·戈雷利 马可·戈雷利 玛格丽特·迪佩尔 + 玛丽亚姆克+ 马丁·弗莱施曼 马文·约翰·沃尔特 + 马文·沃尔特 + 马特乌什 玛蒂尔达 M + 马修·罗斯克 马蒂亚斯·布索尼耶 米塞克斯机器 梅加尔格+ 梅丽莎·韦伯·门多萨 + 迈克尔·米尔顿 + 迈克尔·王 迈克·麦卡蒂 + 米洛尼·阿塔尔 + 米特拉索茨基·本斯 + 莫里茨·施赖伯 + 莫滕·坎思·赫尔斯 + 尼克·克鲁斯 + 尼克·菲洛 + 尼古拉斯拥抱+ 尼玛萨朗 诺亚·塔米尔 + 熊猫开发团队 冻糕加萨娜 帕蒂+ 帕索+ 帕特里克·赫夫勒 彼得 彼得·霍金斯 + 菲利普·A 菲利普·谢弗 + 小丑+ 普拉蒂克·帕特尔 + 普里特维吉特 普纳·钱德拉·曼辛 + 拉多斯瓦夫·莱米克 + RaphSku + Reinert Huseby Karlsen + 理查德·沙德拉赫 理查德·沙德拉克 + 罗比·帕尔默 罗伯特·德弗里斯 罗杰+ 罗杰·穆雷 + 邓瑞哲+ 赛利+ 萨钦·亚达夫 + 杨世荣 + 萨姆·拉奥 + 桑德罗·卡萨格兰德 + 塞巴斯蒂安·韦尔默伦 + 沙加耶 + 山塔努+ 沙尚克谢特+ 钟肖恩 + 何双驰 + 西蒙·霍金斯 西蒙·诺特 + 所罗门之歌+ 索姆托奇·乌梅 + 斯特凡·克劳奇克 + 斯蒂芬妮·莫林 史蒂芬·雷伯格 史蒂文·班福德 + 史蒂文·罗通多 + 史蒂文·舍勒 西尔万·玛丽 + 西尔万·玛丽 塔伦·拉古南丹·考希克 + 泰勒·帕卡德 + 特尔吉·彼得森 蒂埃里·莫伊桑 托马斯·格兰杰 托马斯·亨特 + 托马斯·李 蒂姆·麦克法兰 + 蒂姆·斯瓦斯特 杨添+ 托比亚斯·皮特斯 汤姆·阿尔森 + 汤姆·奥格斯普格 托斯顿·沃特温 穿越小镇 + 泰勒·雷迪 瓦伦丁·约文 瓦伦·夏尔马 + 瓦西里·李特维诺夫 文纳图鲁姆 维尼休斯 今泉晃 + 弗拉基米尔·福科夫 + 司文俊 威尔·拉昌斯 + 威廉·安德烈 沃尔夫冈·F·里德尔 + 陈兴荣 亚戈·冈萨雷斯 蒋轶琨 + 耿元浩 尤瓦尔+ 零 王正飞+ 阿布米伊 亚历山大+ 施舍 安杰霍尔 + 阿尼尔贝 + 阿诺德莱古 + asv-机器人 + 阿特基+ 奥德森+ 贝尔沃斯 + 比卡尔森 + 漏碳+ 查尔斯+ 查洛加佐 + 代码审查医生 + 数据采集+ 德波诺沃 迪米特拉·卡拉迪玛 + 多斯皮克斯+ 埃哈拉姆+ 埃桑·希尔瓦尼安 + 余烬91 + 埃希尔瓦纳 分数野兔 + 高田98 + 吉苏斯 github-actions[机器人] 贡哈布+ 哈桑亚曼 健康+ 伊迅+ 杰布罗克门德尔 约书亚贝洛2550 + 尤夫+ 高桥幸也 + 玛丽安娜-LJ + 亚光+ 马特B1989 + 尼尔克斯米+ 帕尔捷夫 波洛索+ 真实领先 罗伊布20+ RTPSW 瑞安吉尔莫 + 舒雅5 + 斯罗通多 + 蔡斯坦利95 + 静态开发+ 特猎人+ 存在+ 托比亚斯·皮特斯 + 解锁+ 韦尔内蒂亚 wany-哦 + 工作频率+ z3c0 +