2.2.0 中的新增功能(2024 年 1 月 19 日)# 这些是 pandas 2.2.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。 pandas 3.0 即将发生的变化# pandas 3.0将对pandas的默认行为带来两个较大的改变。 写入时复制# 当前可选模式 Copy-on-Write 将在 pandas 3.0 中默认启用。不会有选项来保持当前行为启用。有关 Copy-on-Write 的用户指南中解释了新的行为语义。 自 pandas 2.0 起,可以使用以下选项启用新行为: pd.options.mode.copy_on_write = True 这一变化给 pandas 在副本和视图方面的操作方式带来了不同的行为变化。其中一些更改允许明确弃用,例如链式分配中的更改。其他更改更加微妙,因此警告隐藏在可在 pandas 2.2 中启用的选项后面。 pd.options.mode.copy_on_write = "warn" 此模式将在许多与大多数查询实际上不相关的不同场景中发出警告。我们建议探索这种模式,但没有必要消除所有这些警告。迁移指南 更详细地解释了升级过程。 默认情况下专用字符串数据类型(由箭头支持)# 从历史上看,pandas 用 NumPy 对象数据类型表示字符串列。这种表示有很多问题,包括性能低下和内存占用大。这将在 pandas 3.0 中改变。 pandas 将开始将字符串列推断为新的string数据类型,由 Arrow 支持,它表示内存中连续的字符串。这带来了巨大的性能和内存提升。 旧行为: In [1]: ser = pd.Series(["a", "b"]) Out[1]: 0 a 1 b dtype: object 新行为: In [1]: ser = pd.Series(["a", "b"]) Out[1]: 0 a 1 b dtype: string 这些场景中使用的字符串数据类型的行为大多与 NumPy 对象相同,包括缺失值语义和对这些列的常规操作。 此更改包括 API 中的一些其他更改: 目前,指定dtype="string"创建一个由存储在 NumPy 数组中的 Python 字符串支持的数据类型。这将在 pandas 3.0 中发生变化,此 dtype 将创建一个箭头支持的字符串列。 列名和索引也将由箭头字符串支持。 PyArrow 将成为 pandas 3.0 的必需依赖项,以适应这一变化。 可以通过以下方式启用此未来的数据类型推断逻辑: pd.options.future.infer_string = True 增强功能# to_sql 和 read_sql 中的 ADBC 驱动程序支持# read_sql()现在to_sql()可以使用Apache Arrow ADBC驱动程序。与通过 SQLAlchemy 使用的传统驱动程序相比,ADBC 驱动程序应提供显着的性能改进、更好的类型支持和更清晰的可为空处理。 import adbc_driver_postgresql.dbapi as pg_dbapi df = pd.DataFrame( [ [1, 2, 3], [4, 5, 6], ], columns=['a', 'b', 'c'] ) uri = "postgresql://postgres:postgres@localhost/postgres" with pg_dbapi.connect(uri) as conn: df.to_sql("pandas_table", conn, index=False) # for round-tripping with pg_dbapi.connect(uri) as conn: df2 = pd.read_sql("pandas_table", conn) Arrow 类型系统提供了更广泛的类型,可以更紧密地匹配 PostgreSQL 等数据库可以提供的类型。为了说明这一点,请注意不同数据库和 pandas 后端中可用类型的(非详尽)列表: numpy/熊猫 箭 postgres sqlite 整型16/整型16 整型16 小智 整数 int32/Int32 整型32 整数 整数 int64/Int64 整型64 BIGINT 整数 浮动32 浮动32 真实的 真实的 浮动64 浮动64 双精度 真实的 目的 细绳 文本 文本 布尔值 bool_ 布尔值 日期时间64[ns] 时间戳(我们) 时间戳 日期时间64[ns,tz] 时间戳(我们,tz) 时间戳 日期32 日期 月日纳米间隔 间隔 二进制 二进制 BLOB 十进制128 小数[ 1 ] 列表 阵列[ 1 ] 结构体 复合型[ 1 ] 脚注 如果您有兴趣在 DataFrame 的整个生命周期中尽可能保留数据库类型,则鼓励用户利用dtype_backend="pyarrow"以下论点:read_sql() # for round-tripping with pg_dbapi.connect(uri) as conn: df2 = pd.read_sql("pandas_table", conn, dtype_backend="pyarrow") 这将阻止您的数据转换为传统的 pandas/NumPy 类型系统,该系统通常以无法往返的方式转换 SQL 类型。 有关 ADBC 驱动程序及其开发状态的完整列表,请参阅ADBC 驱动程序实现状态 文档。 根据一个或多个条件创建 pandas 系列# 添加了该Series.case_when()函数以根据一个或多个条件创建 Series 对象。 (GH 39154) In [1]: import pandas as pd In [2]: df = pd.DataFrame(dict(a=[1, 2, 3], b=[4, 5, 6])) In [3]: default=pd.Series('default', index=df.index) In [4]: default.case_when( ...: caselist=[ ...: (df.a == 1, 'first'), # condition, replacement ...: (df.a.gt(1) & df.b.eq(5), 'second'), # condition, replacement ...: ], ...: ) ...: Out[4]: 0 first 1 second 2 default dtype: object to_numpy对于 NumPy 可空和箭头类型转换为合适的 NumPy dtype # to_numpy对于 NumPy 可空和 Arrow 类型现在将转换为合适的 NumPy dtype,而不是object可空和 PyArrow 支持的扩展数据类型的 dtype。 旧行为: In [1]: ser = pd.Series([1, 2, 3], dtype="Int64") In [2]: ser.to_numpy() Out[2]: array([1, 2, 3], dtype=object) 新行为: In [5]: ser = pd.Series([1, 2, 3], dtype="Int64") In [6]: ser.to_numpy() Out[6]: array([1, 2, 3]) In [7]: ser = pd.Series([1, 2, 3], dtype="timestamp[ns][pyarrow]") In [8]: ser.to_numpy() Out[8]: array(['1970-01-01T00:00:00.000000001', '1970-01-01T00:00:00.000000002', '1970-01-01T00:00:00.000000003'], dtype='datetime64[ns]') 默认 NumPy dtype(不带任何参数)确定如下: float dtypes 被转换为 NumPy floats 没有缺失值的整数 dtypes 被转换为 NumPy 整数 dtypes 具有缺失值的整数数据类型将转换为 NumPy 浮点数据类型并NaN用作缺失值指示符 没有缺失值的 boolean dtypes 被转换为 NumPy bool dtype 具有缺失值的布尔数据类型保留对象数据类型 datetime 和 timedelta 类型分别转换为 Numpy datetime64 和 timedelta64 类型,并NaT用作缺失值指示符 PyArrow 结构化数据的 Series.struct 访问器# 访问Series.struct器提供用于处理struct[pyarrow]dtype Series 数据的属性和方法。例如, Series.struct.explode()将 PyArrow 结构化数据转换为 pandas DataFrame。 (GH 54938) In [9]: import pyarrow as pa In [10]: series = pd.Series( ....: [ ....: {"project": "pandas", "version": "2.2.0"}, ....: {"project": "numpy", "version": "1.25.2"}, ....: {"project": "pyarrow", "version": "13.0.0"}, ....: ], ....: dtype=pd.ArrowDtype( ....: pa.struct([ ....: ("project", pa.string()), ....: ("version", pa.string()), ....: ]) ....: ), ....: ) ....: In [11]: series.struct.explode() Out[11]: project version 0 pandas 2.2.0 1 numpy 1.25.2 2 pyarrow 13.0.0 用于Series.struct.field()索引(可能嵌套的)结构字段。 In [12]: series.struct.field("project") Out[12]: 0 pandas 1 numpy 2 pyarrow Name: project, dtype: string[pyarrow] PyArrow 列表数据的 Series.list 访问器# 访问Series.list器提供用于处理list[pyarrow]dtype Series 数据的属性和方法。例如, Series.list.__getitem__()允许对系列中的 pyarrow 列表建立索引。 (GH 55323) In [13]: import pyarrow as pa In [14]: series = pd.Series( ....: [ ....: [1, 2, 3], ....: [4, 5], ....: [6], ....: ], ....: dtype=pd.ArrowDtype( ....: pa.list_(pa.int64()) ....: ), ....: ) ....: In [15]: series.list[0] Out[15]: 0 1 1 4 2 6 dtype: int64[pyarrow] #炉甘石发动机read_excel() 该calamine引擎被添加到read_excel().它使用,为 Rust 库calaminepython-calamine提供 Python 绑定。该引擎支持 Excel 文件 ( 、、、) 和 OpenDocument 电子表格 ( ) ( GH 50395 )。.xlsx.xlsm.xls.xlsb.ods 该发动机有两个优点: Calamine 通常比其他引擎更快,一些基准测试显示结果比“openpyxl”快 5 倍,“odf”快 20 倍,“pyxlsb”快 4 倍,“xlrd”快 1.5 倍。但是,由于行上的惰性迭代,“openpyxl”和“pyxlsb”从大文件中读取几行的速度更快。 Calamine 支持识别.xlsb文件中的日期时间,与 pandas 中唯一可以读取文件的其他引擎“pyxlsb”不同.xlsb。 pd.read_excel("path_to_file.xlsb", engine="calamine") 有关更多信息,请参阅IO 工具用户指南中的炉甘石(Excel 和 ODS 文件) 。 其他增强功能# to_sql()方法参数设置为multi与后端 Oracle 一起使用 Series.attrs/DataFrame.attrs现在使用深层复制进行传播attrs(GH 54134)。 get_dummies()现在返回扩展 dtypesboolean或bool[pyarrow]与输入 dtype 兼容的扩展 dtypes ( GH 56273 ) read_csv()现在支持on_bad_lines参数engine="pyarrow"(GH 54480) read_sas()返回datetime64分辨率与 SAS 中本机存储的分辨率更好匹配的 dtype,并避免在无法使用 dtype 存储的情况下返回对象 dtype datetime64[ns]( GH 56127 ) read_spss()现在返回将DataFrame元数据存储在DataFrame.attrs(GH 54264)中 tseries.api.guess_datetime_format()现在是公共 API 的一部分 ( GH 54727 ) DataFrame.apply()现在允许使用 numba (via engine="numba")来 JIT 编译传递的函数,从而实现潜在的加速(GH 54666) ExtensionArray._explode()添加接口方法以允许该explode方法的扩展类型实现(GH 54833) ExtensionArray.duplicated()添加以允许方法的扩展类型实现duplicated(GH 55255) Series.ffill()、Series.bfill()、DataFrame.ffill()、 并DataFrame.bfill()获得了论证limit_area;第 3 方ExtensionArray作者需要将此参数添加到方法中_pad_or_backfill( GH 56492 ) 允许使用( GH 55027 )向 openpyxl传递read_only和data_only参数keep_linksengine_kwargsread_excel() 实现Series.interpolate()and DataFrame.interpolate()forArrowDtype和 masked dtypes ( GH 56267 ) 实施屏蔽算法Series.value_counts()(GH 54984) 已实现类型的Series.dt()方法和属性(GH 52284)ArrowDtypepyarrow.duration 实施( GHSeries.str.extract() 56268 )ArrowDtype 改进了不支持周期频率的频率中出现的错误消息DatetimeIndex.to_period(),例如"BMS"( GH 56243 ) 改进了使用无效偏移量进行构造时的错误消息,Period例如"QS"( GH 55785 ) dtypesstring[pyarrow]和string[pyarrow_numpy]现在都利用large_stringPyArrow 的类型来避免长列溢出(GH 56259) 值得注意的错误修复# 这些错误修复可能会带来显着的行为变化。 merge()现在DataFrame.join()始终遵循记录的排序行为# 在 pandas 的早期版本中,merge()并不DataFrame.join()总是返回遵循记录的排序行为的结果。 pandas 现在遵循合并和连接操作中记录的排序行为(GH 54611、GH 56426、GH 56443)。 如文档所述,sort=True在结果中按字典顺序对连接键进行排序 DataFrame。对于sort=False,连接键的顺序取决于连接类型(how关键字): how="left":保留左键的顺序 how="right":保留右键的顺序 how="inner":保留左键的顺序 how="outer": 按字典顺序对键进行排序 行为变化的一个示例是具有非唯一左连接键的内部连接 和sort=False: In [16]: left = pd.DataFrame({"a": [1, 2, 1]}) In [17]: right = pd.DataFrame({"a": [1, 2]}) In [18]: result = pd.merge(left, right, how="inner", on="a", sort=False) 旧行为 In [5]: result Out[5]: a 0 1 1 1 2 2 新行为 In [19]: result Out[19]: a 0 1 1 2 2 1 merge()DataFrame.join()当级别不同时不再重新排序级别# 在 pandas 的早期版本中,当连接两个不同级别的索引时,merge()and会重新排序索引级别 ( GH 34133 )。DataFrame.join() In [20]: left = pd.DataFrame({"left": 1}, index=pd.MultiIndex.from_tuples([("x", 1), ("x", 2)], names=["A", "B"])) In [21]: right = pd.DataFrame({"right": 2}, index=pd.MultiIndex.from_tuples([(1, 1), (2, 2)], names=["B", "C"])) In [22]: left Out[22]: left A B x 1 1 2 1 In [23]: right Out[23]: right B C 1 1 2 2 2 2 In [24]: result = left.join(right) 旧行为 In [5]: result Out[5]: left right B A C 1 x 1 1 2 2 x 2 1 2 新行为 In [25]: result Out[25]: left right A B C x 1 1 1 2 2 2 1 2 增加了依赖项的最低版本# 对于可选依赖项,一般建议使用最新版本。低于最低测试版本的可选依赖项可能仍然有效,但不被视为受支持。下表列出了已增加最低测试版本的可选依赖项。 包裹 新的最低版本 美丽汤4 4.11.2 布卢斯克 1.21.3 瓶颈 1.3.6 快速镶木地板 2022.12.0 FS规范 2022.11.0 GCSFS 2022.11.0 lxml 4.9.2 绘图库 3.6.3 努巴 0.56.4 数值表达式 2.8.4 qtpy 2.3.0 开放式pyxl 3.1.0 心理咨询师2 2.9.6 pyreadstat 1.2.0 pytables 3.8.0 pyxlsb 1.0.10 s3fs 2022.11.0 scipy 1.10.0 sqlalchemy 2.0.0 制表 0.9.0 阵列 2022.12.0 XLSX作家 3.0.5 标准 0.19.0 pyqt5 5.15.8 兹数据 2022.7 有关更多信息,请参阅依赖项和可选依赖项。 其他 API 更改# 可空扩展数据类型的哈希值已更改,以提高哈希操作的性能 ( GH 56507 ) check_exacttesting.assert_frame_equal()现在仅对和中的浮点数据类型生效testing.assert_series_equal()。特别是,整数数据类型总是被精确检查(GH 55882) 弃用# 链式分配# 为了准备对 pandas 3.0 中的复制/查看行为进行更大的更改(写入时复制 (CoW)、PDEP-7),我们开始弃用链式分配。 当您尝试通过两个后续索引操作更新 pandas DataFrame 或 Series 时,会发生链式分配。根据这些操作的类型和顺序,当前是否有效。 典型示例如下: df = pd.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]}) # first selecting rows with a mask, then assigning values to a column # -> this has never worked and raises a SettingWithCopyWarning df[df["bar"] > 5]["foo"] = 100 # first selecting the column, and then assigning to a subset of that column # -> this currently works df["foo"][df["bar"] > 5] = 100 链式分配的第二个示例当前用于更新原始df.这在 pandas 3.0 中不再有效,因此我们开始弃用它: >>> df["foo"][df["bar"] > 5] = 100 FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. A typical example is when you are setting values in a column of a DataFrame, like: df["col"][row_indexer] = value Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy 您可以通过删除链式赋值的使用来修复此警告并确保您的代码已为 pandas 3.0 做好准备。通常,这可以通过使用例如 进行单个步骤中的分配来完成.loc。对于上面的例子,我们可以这样做: df.loc[df["bar"] > 5, "foo"] = 100 同样的弃用适用于以链式方式完成的就地方法,例如: >>> df["foo"].fillna(0, inplace=True) FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method. The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy. For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object. 当目标是更新 DataFrame 中的列时df,这里的替代方法是调用自身的方法df,例如.df.fillna({"foo": 0}, inplace=True) 请参阅迁移指南中的更多详细信息。 弃用别名M, Q,Y等,转而使用ME, QE,YE等作为偏移量# 已弃用以下频率别名 ( GH 9586 ): 偏移量 已弃用的别名 新别名 MonthEnd M ME BusinessMonthEnd BM BME SemiMonthEnd SM SME CustomBusinessMonthEnd CBM CBME QuarterEnd Q QE BQuarterEnd BQ BQE YearEnd Y YE BYearEnd BY BYE 例如: 以前的行为: In [8]: pd.date_range('2020-01-01', periods=3, freq='Q-NOV') Out[8]: DatetimeIndex(['2020-02-29', '2020-05-31', '2020-08-31'], dtype='datetime64[ns]', freq='Q-NOV') 未来的行为: In [26]: pd.date_range('2020-01-01', periods=3, freq='QE-NOV') Out[26]: DatetimeIndex(['2020-02-29', '2020-05-31', '2020-08-31'], dtype='datetime64[ns]', freq='QE-NOV') 已弃用自动向下转型# 已弃用对象数据类型的自动向下转换导致许多方法。这些将以难以预测的方式悄悄地改变数据类型,因为行为是依赖于值的。此外,pandas 正在远离静默的 dtype 更改(GH 54710、GH 54261)。 这些方法是: Series.replace()和DataFrame.replace() DataFrame.fillna(),Series.fillna() DataFrame.ffill(),Series.ffill() DataFrame.bfill(),Series.bfill() DataFrame.mask(),Series.mask() DataFrame.where(),Series.where() DataFrame.clip(),Series.clip() 明确调用DataFrame.infer_objects()以在将来复制当前行为。 result = result.infer_objects(copy=False) 或者使用 显式地将全能浮点数转换为整数astype。 设置以下选项以选择未来的行为: In [9]: pd.set_option("future.no_silent_downcasting", True) 其他弃用# 更改Timedelta.resolution_string()为返回h, min, s, ms, us, 和ns而不是H, T, S, L, U, 和N, 以便与频率别名中的相应弃用兼容 ( GH 52536 ) 已弃用offsets.Day.delta, offsets.Hour.delta, offsets.Minute.delta, offsets.Second.delta, offsets.Milli.delta, offsets.Micro.delta, offsets.Nano.delta, 请改用pd.Timedelta(obj)( GH 55498 ) 已弃用pandas.api.types.is_interval()and pandas.api.types.is_period(),使用and代替 ( GH 55264 )isinstance(obj, pd.Interval)isinstance(obj, pd.Period) 已弃用read_gbq()和DataFrame.to_gbq().使用pandas_gbq.read_gbqhttps://pandas-gbq.readthedocs.io/en/latest/api.html ( GHpandas_gbq.to_gbq 55525 ) 已弃用DataFrameGroupBy.fillna()和SeriesGroupBy.fillna();使用DataFrameGroupBy.ffill(),DataFrameGroupBy.bfill()进行向前和向后填充或DataFrame.fillna()用单个值(或系列等效值)填充(GH 55718) 已弃用DateOffset.is_anchored(),用于非 Tick 子类(对于 Tick 这始终为 False)(GH 55388)obj.n == 1 已弃用DatetimeArray.__init__()和TimedeltaArray.__init__(),请改用array()( GH 55623 ) 已弃用Index.format(),使用index.astype(str)或index.map(formatter)替代 ( GH 55413 ) 已弃用Series.ravel(),底层数组已经是一维的,因此不需要 ravel ( GH 52511 ) 已弃用Series.resample()并DataFrame.resample()使用 a PeriodIndex(以及“约定”关键字),在重新采样之前转换为DatetimeIndex(with ) ( GH 53481 ).to_timestamp() 已弃用Series.view(),改用Series.astype()它来更改 dtype ( GH 20251 ) 已弃用offsets.Tick.is_anchored(),请False改用 ( GH 55388 ) 已弃用的core.internals成员Block、ExtensionBlock和DatetimeTZBlock,改用公共 API ( GH 55139 ) 构造函数中已弃用year、month、quarter、day、hour、minute和second关键字PeriodIndex,请改用PeriodIndex.from_fields()( GH 55960 ) 已弃用接受类型作为参数Index.view(),改为不带任何参数的调用 ( GH 55709 ) 已弃用允许在、、和( GH 56036 )中使用非整数periods参数date_range()timedelta_range()period_range()interval_range() DataFrame.to_clipboard()已弃用( GH 54229 )中允许非关键字参数 DataFrame.to_csv()不推荐使用except中的非关键字参数path_or_buf(GH 54229) DataFrame.to_dict()已弃用( GH 54229 )中允许非关键字参数 DataFrame.to_excel()不推荐使用except中的非关键字参数excel_writer(GH 54229) DataFrame.to_gbq()不推荐使用except中的非关键字参数destination_table(GH 54229) DataFrame.to_hdf()不推荐使用except中的非关键字参数path_or_buf(GH 54229) DataFrame.to_html()不推荐使用except中的非关键字参数buf(GH 54229) DataFrame.to_json()不推荐使用except中的非关键字参数path_or_buf(GH 54229) DataFrame.to_latex()不推荐使用except中的非关键字参数buf(GH 54229) DataFrame.to_markdown()不推荐使用except中的非关键字参数buf(GH 54229) DataFrame.to_parquet()不推荐使用except中的非关键字参数path(GH 54229) DataFrame.to_pickle()不推荐使用except中的非关键字参数path(GH 54229) DataFrame.to_string()不推荐使用except中的非关键字参数buf(GH 54229) DataFrame.to_xml()不推荐使用except中的非关键字参数path_or_buffer(GH 54229) 已弃用允许将BlockManager对象传递给DataFrame或SingleBlockManager将对象传递给Series(GH 52419) Index.insert()不推荐使用对象数据类型索引对结果静默执行类型推断的行为,result.infer_objects(copy=False)而是显式调用旧行为(GH 51363) 已弃用在、和dtypesSeries.isin()中强制转换非日期时间类值(主要是字符串)(GH 53111)Index.isin()datetime64timedelta64PeriodDtype 已弃用 中的 dtype 推断Index,Series并且DataFrame构造函数在提供 pandas 输入时,调用.infer_objects输入以保持当前行为 ( GH 56012 ) Index将 a 设置为 a时已弃用 dtype 推断DataFrame,改为显式转换 ( GH 56102 ) DataFrameGroupBy.apply()已弃用在使用和时将组包含在计算中DataFrameGroupBy.resample();通过include_groups=False排除组(GH 7155) Index已弃用使用长度为零的布尔索引器来索引 an ( GH 55820 ) 已弃用不将元组传递给DataFrameGroupBy.get_group或SeriesGroupBy.get_group按长度为 1 的列表进行分组时(GH 25971) AS已弃用表示频率的字符串YearBegin和 字符串AS-DEC,AS-JAN等,表示各个财政年度开始的年度频率 ( GH 54275 ) A已弃用表示频率的字符串YearEnd和 字符串A-DEC,A-JAN等,表示不同财政年度结束的年度频率 ( GH 54275 ) BAS已弃用表示频率的字符串BYearBegin和 字符串BAS-DEC,BAS-JAN等,表示各个财政年度开始的年度频率 ( GH 54275 ) BA已弃用表示频率的字符串BYearEnd和 字符串BA-DEC,BA-JAN等,表示不同财政年度结束的年度频率 ( GH 54275 ) 已弃用的字符串H, BH, 以及CBH表示 , , 中频率的Hour字符串BusinessHour( CustomBusinessHourGH 52536 ) ( GH 52536 )中已弃用的字符串H、S、U和N表示单位to_timedelta() 已弃用字符串H、T、S、L、U和表示( GH 52536 )N中的单位Timedelta 已弃用字符串T, S, L, U, 以及在, , , ,N中表示频率的字符串( GH 52536 )MinuteSecondMilliMicroNano read_csv()已弃用对将解析的日期时间列与关键字组合在一起的支持keep_date_col(GH 55569) 已弃用DataFrameGroupBy.grouper和SeriesGroupBy.grouper;这些属性将在 pandas 的未来版本中删除(GH 56521) 已弃用Grouping属性group_index、result_index和group_arraylike;这些将在 pandas 的未来版本中删除(GH 56148) 已弃用anddelim_whitespace中的关键字,请改用( GH 55569 )read_csv()read_table()sep="\\s+" 已弃用、和errors="ignore"中的选项;而是显式捕获异常(GH 54467)to_datetime()to_timedelta()to_numeric() 已弃用构造函数fastpath中的关键字Series( GH 20110 ) 弃用了andkind中的关键字,而是显式转换对象的关键字(GH 55895)Series.resample()DataFrame.resample()index 已弃用ordinal中的关键字PeriodIndex,请改用PeriodIndex.from_ordinals()( GH 55960 ) 已弃用构造unit中的关键字,请改用( GH 55499 )TimedeltaIndexto_timedelta() 已弃用and ( GH 55569 )verbose中的关键字read_csv()read_table() DataFrame.replace()弃用和Series.replace()with的行为CategoricalDtype;在未来的版本中,替换将更改值,同时保留类别。要更改类别,请改用ser.cat.rename_categories( GH 55147 ) Series.value_counts()弃用了Index.value_counts()object dtype的行为;在未来的版本中,这些不会对结果执行数据类型推断Index,而是保留旧的行为(GH 56161)result.index = result.index.infer_objects() observed=False弃用了in的默认值DataFrame.pivot_table();将True在未来版本中(GH 56236) 已弃用扩展测试类BaseNoReduceTests、BaseBooleanReduceTests、 和BaseNumericReduceTests,请BaseReduceTests改用 ( GH 54663 ) 已弃用该选项mode.data_manager和ArrayManager;仅BlockManager在未来版本中可用 ( GH 55043 ) 弃用了之前的实现DataFrame.stack;指定future_stack=True采用未来版本(GH 53515) 性能改进# testing.assert_frame_equal()和testing.assert_series_equal()( GH 55949、GH 55971 )的性能改进 concat()具有axis=1未对齐索引的对象的性能改进( GH 55084) get_dummies()( GH 56089 )的性能改进 加入排序升序键时的merge()性能改进( GH 56115)merge_ordered() merge_asof()不时by的性能改进None(GH 55580,GH 55678) read_stata()具有许多变量的文件的性能改进( GH 55515) DataFrame.groupby()聚合 pyarrow 时间戳和持续时间 dtypes 时的性能改进( GH 55031) DataFrame.join()连接无序分类索引时的性能改进( GH 56345) 使用( GH 56062 )建立索引时DataFrame.loc()的性能改进Series.loc()MultiIndex 由( GH 54835 )索引DataFrame.sort_index()时的性能改进Series.sort_index()MultiIndex DataFrame.to_dict()将 DataFrame 转换为字典的性能改进( GH 50990) Index.difference()( GH 55108 )的性能改进 Index.sort_values()索引已排序时的性能改进( GH 56128) MultiIndex.get_indexer()不时method的性能改进None( GH 55839 ) Series.duplicated()pyarrow dtypes 的性能改进( GH 55255) Series.str.get_dummies()当 dtype 为"string[pyarrow]"或"string[pyarrow_numpy]"( GH 56110 )时的性能改进 方法性能改进Series.str()( GH 55736 ) 屏蔽数据类型的性能改进Series.value_counts()(GH 54984,GH 55340)Series.mode() DataFrameGroupBy.nunique()和SeriesGroupBy.nunique()( GH 55972 )的性能改进 性能改进SeriesGroupBy.idxmax(),,,,(GHSeriesGroupBy.idxmin() 54234 )DataFrameGroupBy.idxmax()DataFrameGroupBy.idxmin() 对可为空的扩展数组进行散列时的性能改进 ( GH 56507 ) 索引到非唯一索引时的性能改进(GH 55816) 使用超过 4 个键进行索引时的性能改进 ( GH 54550 ) 将时间本地化为 UTC 时的性能改进 ( GH 55241 ) Bug修复# 分类# Categorical.isin()提高InvalidIndexError包含重叠Interval值的分类(GH 34974) CategoricalDtype.__eq__()返回False混合类型的无序分类数据时出现错误( GH 55468) 转换pa.dictionary为CategoricalDtype使用 apa.DictionaryArray作为类别时出现错误 ( GH 56672 ) 类似日期时间# DatetimeIndex同时传递 atz和其中之一dayfirst或yearfirst忽略 dayfirst/yearfirst时的构造错误( GH 55813 ) DatetimeIndex传递 float 对象的 object-dtype ndarray 时出现错误,并且tz错误地本地化结果 ( GH 55780 ) Series.isin()dtype 和比较值的错误DatetimeTZDtype都NaT错误地返回全部 -False即使该系列包含NaT条目 ( GH 56427 ) 将全 NA DataFrame 与dtype DataFrame连接时concat()引发的错误( GH 52093)AttributeErrorDatetimeTZDtype testing.assert_extension_array_equal()比较分辨率时可能使用错误单位的错误( GH 55730) 在传递混合字符串和数字类型的列表时错误地引发to_datetime()错误(GH 55780)DatetimeIndex 传递具有混合时区或混合时区感知的混合类型对象时出现to_datetime()错误(GH 55693)DatetimeIndexValueError 错误是Tick.delta()用非常大的蜱虫引起的OverflowError而不是OutOfBoundsTimedelta(GH 55503) DatetimeIndex.shift()非纳秒分辨率的错误错误地以纳秒分辨率返回( GH 56117) DatetimeIndex.union()返回具有相同时区但不同单位的 tz 感知索引的对象 dtype 时出现错误( GH 55238 ) 当索引中的第一个值是(GH 55755)时出现错误Index.is_monotonic_increasing()并Index.is_monotonic_decreasing()始终进行缓存Index.is_unique()TrueNaT 错误地进入Index.view()datetime64 dtype 并错误地引发不受支持的分辨率 ( GH 55710 ) Series.dt.round()非纳秒分辨率和NaT条目错误地引发错误OverflowError(GH 56158) Series.fillna()非纳秒分辨率数据类型和更高分辨率向量值的错误返回不正确(内部损坏)的结果(GH 56410) Timestamp.unit()从具有分钟或小时分辨率和时区偏移量的 ISO8601 格式字符串错误推断的错误( GH 56208 ) .astype从较高分辨率的datetime64数据类型转换为较低分辨率的datetime64数据类型(例如)时出现的错误datetime64[us]->datetime64[ms],会悄悄地溢出接近较低实现边界的值(GH 55979) 添加或减go非纳秒分辨率的Week偏移量到datetime64 Series、Index或列时出现错误,返回不正确的结果 ( GH 55583 )DataFrame 添加或减go具有非纳秒属性的BusinessDay偏移量的错误,或列给出不正确的结果(GH 55608)offsetIndexSeriesDataFrame DateOffset将具有微秒分量的对象添加或减go具有非纳秒分辨率的datetime64 Index、Series或列时出现错误 ( GH 55595 )DataFrame 添加或减go非常大的Tick对象Timestamp或Timedelta提升对象OverflowError的错误OutOfBoundsTimedelta(GH 55503) 创建非纳秒的Index、Series或时出现错误,并且输入会超出纳秒分辨率的范围,错误地提高(GH 54620)DataFrameDatetimeTZDtypeOutOfBoundsDatetime 从混合数字输入创建非纳秒(或)的Index、Series或 时出现错误,将其视为纳秒而不是 dtype 单位的倍数(这在非混合数字输入中会发生)(GH 56004)DataFramedatetime64DatetimeTZDtype 使用非纳秒数据类型和输入创建Index、Series或 时出现错误,这些输入将超出错误提升的范围(GH 55756)DataFramedatetime64datetime64[ns]OutOfBoundsDatetime 使用非 ISO8601 格式解析具有纳秒分辨率的日期时间字符串时出现错误,错误地截断了亚微秒组件 ( GH 56051 ) 解析具有亚秒分辨率和尾随零的日期时间字符串时出现错误,错误地推断秒或毫秒分辨率 ( GH 55737 ) to_datetime()使用 float-dtype 参数的结果中的错误与( GH 56037 )unit的逐点结果不匹配Timestamp 修复了连接具有不同分辨率的列concat()时会引发错误的回归( GH 53641)datetime64 时间增量# Timedelta建筑提升中的错误OverflowError而不是OutOfBoundsTimedelta(GH 55503) 使用非纳秒分辨率条目渲染 ( __repr__)TimedeltaIndex和Series使用 timedelta64 值时出现的错误,这些条目都是 24 小时的倍数,无法使用纳秒情况下使用的紧凑表示形式 ( GH 55405 ) 时区# AbstractHolidayCalendar计算节日庆祝活动时未传播时区数据的错误( GH 54580 ) 构造错误Timestamp,值不明确且pytz时区未能引发pytz.AmbiguousTimeError(GH 55657) DST 期间 UTC+0 左右Timestamp.tz_localize()出现错误( GH 51501 )nonexistent="shift_forward 数字# read_csv()导致engine="pyarrow"大整数舍入错误的错误(GH 52505) Series.__floordiv__()针对大除数的整数 dtypes 的Series.__truediv__()错误( GH 56706 )ArrowDtype 整数 dtypes 提升大值时出现错误Series.__floordiv__()( GH 56645 )ArrowDtype Series.pow()未正确填充缺失值的错误( GH 55512) 错误Series.replace()和DataFrame.replace()匹配浮动,0.0反之亦然False(GH 55398) 引发可空布尔数据类型的错误Series.round()(GH 55936) 转换# DataFrame.astype()在未腌制的数组上调用时出现错误str- 数组可能会就地更改(GH 54654) DataFrame.astype()其中的错误errors="ignore"对扩展类型没有影响(GH 54654) Series.convert_dtypes()未将所有 NA 列转换为null[pyarrow]( GH 55346 )的错误 :meth: 中的错误:使用完整的列设置器分配不同的 dtype 时,DataFrame.loc没有抛出“不兼容的 dtype 警告”(参见PDEP6 )(例如)(GH 39584)Seriesdf.loc[:, 'a'] = incompatible_value 字符串# pandas.api.types.is_string_dtype()检查没有元素的对象数组是否属于字符串数据类型时出现错误( GH 54661) 当列或索引具有DataFrame.apply()时失败的错误(GH 56189)engine="numba"StringDtype 与dtypeDataFrame.reindex()不匹配的错误(GH 56106)Indexstring[pyarrow_numpy] 始终将结果转换为对象数据类型的错误Index.str.cat()(GH 56157) Series.__mul__()dtype和pyarrow 后端的ArrowDtype错误( GH 51970 )pyarrow.stringstring[pyarrow] Series.str.find()当for with时出现错误(GH 56411)start < 0ArrowDtypepyarrow.string 当正则表达式以文字 //$ 结尾时允许部分匹配Series.str.fullmatch()时出现的错误( GH 56652)dtype=pandas.ArrowDtype(pyarrow.string())) Series.str.replace()当for with时出现错误(GH 56404)n < 0ArrowDtypepyarrow.string Series.str.startswith()和with 类型为with dtypeSeries.str.endswith()的参数中的错误(GH 56579)tuple[str, ...]ArrowDtypepyarrow.string 错误类型为( GH 54942 )的Series.str.startswith()参数Series.str.endswith()tuple[str, ...]string[pyarrow] dtype="string[pyarrow_numpy]"如果无法比较数据类型,则比较操作中会出现错误( GH 56008) 间隔# 不显示边界的 UTC 偏移量的错误。此外,现在将显示小时、分钟和秒部分 ( GH 55015 )Interval __repr__Timestamp IntervalIndex.factorize()datetime64 或 timedelta64间隔Series.factorize()中的错误IntervalDtype不保留非纳秒单位(GH 56099) IntervalIndex.from_arrays()传递错误或datetime64分辨率timedelta64不匹配的数组构造无效IntervalArray对象(GH 55714) IntervalIndex.from_tuples()如果子类型是可为空的扩展数据类型,则引发错误( GH 56765) IntervalIndex.get_indexer()日期时间或时间增量间隔在整数目标上不正确匹配的错误( GH 47772) 时区感知IntervalIndex.get_indexer()日期时间间隔错误地匹配一系列时区天真的目标(GH 47772) Series使用IntervalIndex切片错误地设置 a 上的值时出现错误( GH 54722) 索引# 当有( GH 56635 )DataFrame.loc()时,改变布尔索引器的错误DataFrameMultiIndex 将扩展 dtypeDataFrame.loc()设置为 NumPy dtype 时出现错误( GH 55604)Series 当为空或被认为不可比较时Index.difference()不返回一组唯一值的错误( GH 55113)otherother Categorical将值设置为DataFrame带有 numpy dtypes 提升的错误RecursionError(GH 52927) 修复了设置单个字符串值时创建缺少值的新列时的错误(GH 56204) 丢失的# 错误DataFrame.update()没有就 tz 感知的 datetime64 dtypes 进行就地更新(GH 56227) 多重索引# 提供时MultiIndex.get_indexer()不引发且索引非单调的错误( GH 53452)ValueErrormethod 输入/输出# 指定时不尊重argread_csv()的错误( GH 56323 )engine="python"chunksizeskiprows 指定可调用和块大小read_csv()时engine="python"导致的错误( GH 55677)TypeErrorskiprows 错误read_csv()将on_bad_lines="warn"写入stderr而不是引发 Python 警告;现在产生errors.ParserWarning( GH 54296 ) 错误在read_csv()被忽略的engine="pyarrow"地方quotechar(GH 52266) 错误之处read_csv()在于engine="pyarrow"无法usecols使用没有标题的 CSV ( GH 54459 ) 当文件包含或(GH 54564)时read_excel(),engine="xlrd"(文件)中的错误xlsNaNInf 如果设置了read_json()则无法正确处理数据类型转换的错误( GH 56195)infer_string 错误DataFrame.to_excel(),OdsWriter(ods文件)写入布尔/字符串值(GH 54994) DataFrame.to_hdf()非纳秒分辨率的数据类型中read_hdf()的错误datetime64无法正确往返(GH 55622) DataFrame.to_stata()扩展数据类型提升中的错误( GH 54671) 当字符串单元格包含注释时(文件)出现错误read_excel()(GH 55200)engine="odf"ods read_excel()ODS 文件中的错误没有浮点值的缓存格式化单元格 ( GH 55219 ) Bug会在不支持的 NumPy 类型中DataFrame.to_json()引发 anOverflowError而不是 a ( GH 55403 )TypeError 时期# PeriodIndex当超过一个data、ordinal和**fields被通过而未能引发时,构造中的错误ValueError(GH 55961) 另外,错误Period会默默地包裹而不是抬起OverflowError(GH 55503) 从PeriodDtype使用astype到datetime64或DatetimeTZDtype使用非纳秒单位进行铸造时错误地以纳秒单位返回(GH 55958) 绘图# 错误DataFrame.plot.box()以及使用(GH 54941)创建的vert=FalseMatplotlibAxessharey=True DataFrame.plot.scatter()丢弃字符串列的错误( GH 56142) Series.plot()当重用对象时,在传递关键字ax时无法引发错误( GH 55953)how 分组/重新采样/滚动# 当索引是包含 NA 值的 a 时,DataFrameGroupBy.idxmin()、DataFrameGroupBy.idxmax()、SeriesGroupBy.idxmin()和中的错误SeriesGroupBy.idxmax()不会保留dtype ( GH 54234 )CategoricalCategoricalIndex 错误DataFrameGroupBy.transform()以及SeriesGroupBy.transform()何时observed=False和f="idxmin"或f="idxmax"会错误地在未观察到的类别上引发错误(GH 54234) 如果 DataFrame 的列或系列的名称是整数,DataFrameGroupBy.value_counts()则可能会导致错误排序( GH 55951)SeriesGroupBy.value_counts() 窃听DataFrameGroupBy.value_counts()并且SeriesGroupBy.value_counts()不尊重sort=Falseand DataFrame.groupby()( Series.groupby()GH 55951 ) 当and ( GH 55951 )时DataFrameGroupBy.value_counts(), 和会SeriesGroupBy.value_counts()按比例而不是频率进行排序sort=Truenormalize=True 非纳秒分辨率的错误错误地转换为纳秒分辨率DataFrame.asfreq()(GH 55958)Series.asfreq()DatetimeIndex 使用非纳秒或dtypeDataFrame.ewm()传递时出现错误(GH 56262)timesdatetime64DatetimeTZDtype DataFrame.groupby()和中的错误(GH 54847)时,按 和 NA 值Series.groupby()的组合进行分组将失败Decimalsort=True DataFrame.groupby()选择列的子集以应用函数时,DataFrame 子类出现错误( GH 56761) DataFrame.resample()不尊重closed和label争论的错误BusinessDay(GH 55282) 在of或类型DataFrame.resample()上重新采样时出现错误(GH 55989)ArrowDtypepyarrow.timestamppyarrow.duration DataFrame.resample()垃圾箱边缘不正确的错误BusinessDay( GH 55281 ) DataFrame.resample()垃圾箱边缘不正确的错误MonthBegin( GH 55271 ) DataFrame.rolling()和中的错误Series.rolling(),其中重复的类似日期时间的索引被视为连续而不是与和相等closed='left'(closed='neither'GH 20712) 或列的类型存在DataFrame.rolling()错误(GH 55849)Series.rolling()indexonArrowDtypepyarrow.timestamp 重塑# 传递索引时concat()忽略参数的错误(GH 54769)sortDatetimeIndex concat()重命名Series时出现错误ignore_index=False(GH 15047) 当dtype 不是, , 或 时merge_asof()引发的错误( GH 22794 )TypeErrorbyobjectint64uint64 merge_asof()引发字符串数据类型不正确错误的错误( GH 56444) 在色谱柱上merge_asof()使用公差时出现错误( GH 56486 )TimedeltaArrowDtype merge()将日期时间列与 timedelta 列合并时不引发错误( GH 56455) merge()将字符串列与数字列合并时不引发错误( GH 56441) merge()未对新字符串数据类型进行排序的错误( GH 56442) merge()当左侧和/或右侧为空时,以不正确的顺序返回列的错误( GH 51929) 如果不是字符串则DataFrame.melt()引发异常的错误( GH 55948)var_name 错误在于DataFrame.melt()它不会保留日期时间(GH 55254) DataFrame.pivot_table()当列具有数字名称时,行边距不正确的错误(GH 26568) DataFrame.pivot()数据的数字列和扩展数据类型存在错误( GH 56528) DataFrame.stack()with中的错误future_stack=True不会保留索引中的 NA 值(GH 56573) 稀疏# arrays.SparseArray.take()使用与数组填充值不同的填充值时出现错误( GH 55181) 其他# DataFrame.__dataframe__()不支持 pyarrow 大字符串(GH 56702) 在结果百分位数中格式化百分位数时出现的错误DataFrame.describe()99.999% 四舍五入为 100% ( GH 55765 ) 处理空字符串列时api.interchange.from_dataframe()引发的错误( GH 56703)NotImplementedError cut()非纳秒单位的 dtype 值中qcut()的错误datetime64错误地返回纳秒单位 bin ( GH 56101 ) 错误地cut()允许使用时区朴素垃圾箱剪切时区感知日期时间的错误(GH 54964) 每周频率和非纳秒分辨率的infer_freq()错误(GH 55609)DatetimeIndex.inferred_freq() DataFrame.apply()传递raw=True忽略args传递给应用函数的错误( GH 55009) DataFrame.from_dict()总是对创建的行进行排序的错误DataFrame。 (GH 55683) DataFrame.sort_index()传球axis="columns"和ignore_index=True举起球时出现错误ValueError(GH 56478) 启用该选项后inf,a 内的渲染值出现错误( GH 55483 )DataFrameuse_inf_as_na 当索引级别的名称之一为 0 且未显示该名称时,使用 a 渲染 aSeries时出现错误( GH 55415)MultiIndex DataFrame将空值分配给列时错误消息中的错误( GH 55956 ) 当类似时间的字符串被转换为ArrowDtype类型时的错误pyarrow.time64(GH 56463) 修复了在使用( GH 55247 )numba传递 numpy ufunc 时从 >= 0.58.0 发出的虚假弃用警告core.window.Rolling.applyengine="numba" 贡献者# 共有 162 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 股份公司 亚伦·拉赫曼 + 阿卜杜拉·伊赫桑·塞塞尔 + 阿比吉特·迪奥 + 阿德里安·达历山德罗 艾哈迈德·穆斯塔法·阿尼斯 + 阿曼达·比齐诺托 阿米斯 KK + 安尼凯特·帕蒂尔 + 安东尼奥·丰塞卡 + 阿图尔·巴尔塞吉安 本·格雷纳 比尔·布鲁姆+ 博伊德·凯恩 达米安·库拉 丹金+ 丹尼尔·温德尔 + 丹尼尔尼科洛迪 大卫·波兹尼克 大卫·托尼安 + 德亚·玛丽亚·莱昂 迪帕克·乔治 + 德米特里+ 多米尼克·加米尔 + 唐纳德·塞瓦林加姆 + 道格·戴维斯 + 杜卡斯特里克+ 埃拉赫·谢里菲 + 埃里克·韩 + 李芳辰 弗朗西斯科·阿尔法罗 + 加迪亚·奥特里克 + 纪尧姆·勒梅特 哈迪·阿卜迪·霍贾斯特 赫德尔·埃尔·肖克 + 黄赫兹2001+ 艾萨克·维尔舒普 伊萨姆+ 伊泰·阿佐莱 + 伊塔亚佐莱+ 哈卡+ 杰克·麦基弗 + 杰克·柯林斯91 + 詹姆斯·斯宾塞 + 杰伊 杰西卡·格林 吉尔卡·博罗维克 + 约翰娜·特罗斯特 + 约翰·C+ 乔里斯·范登博什 何塞·卢卡斯·梅尔 + 何塞·卢卡斯·席尔瓦·迈耶 + 若昂·安德拉德 + 凯·米尔鲍尔 凯瑟琳娜·蒂尔金,医学博士 + 春口和人 + 凯文 劳伦斯·米切尔 莱纳斯+ 莱纳斯·索默 + 路易斯·埃米尔·罗比塔耶 + 卢克·曼利 伐木工(又名杰克) 刘美琪 + 主要半藏 + 马克·加西亚 马可·爱德华·戈雷利 马可·戈雷利 马丁·西乔 + 马特乌什·索科乌 马修斯·费利佩 + 马修·罗斯克 马蒂亚斯·布索尼耶 麦克斯韦·比莱斯基 + 迈克尔·蒂曼 米哈乌·戈尔尼 莫莉·鲍尔斯 + 莫里茨·舒伯特 + NNLNR + 娜塔莉亚·莫基耶娃 尼尔斯·穆勒-温特 + 奥马尔·埃尔巴兹 熊猫开发团队 帕拉斯·古普塔 + 帕蒂 帕特里克·赫夫勒 保罗·佩利西尔 + 保罗·乌伦布鲁克 + 菲利普·迈尔 菲利普·托米 + 阮光 拉加夫 拉贾·苏布拉·慕克吉 拉尔夫·戈默斯 兰道夫·肖尔茨 + 理查德·沙德拉克 罗布+ 罗汉·耆那教 + 瑞安·吉布森 + 赛-苏拉杰-27 + 塞缪尔·奥兰耶利 + 萨拉·博纳蒂 + 塞巴斯蒂安·伯格 谢尔盖·扎哈罗夫 + 沙玛拉·文卡塔克里希南 + 干地理 + 斯蒂芬妮·莫林 斯蒂恩·德·古耶 + 蒂亚戈·加里亚尼 + 托马斯·卡斯威尔 托马斯·鲍曼 + 托马斯·吉耶 + 托马斯·拉扎勒斯 + 托马斯·李 蒂姆·霍夫曼 蒂姆·斯瓦斯特 汤姆·奥格斯普格 托罗+ 托斯顿·沃特温 维尔·艾卡斯 + 维尼塔·帕拉斯拉姆普里亚 + 维亚斯·拉马苏布拉马尼 + 威廉·安德烈 威廉·艾德 王威廉 + 肖媛 姚晓 伊夫·戴利 泽穆克斯1613 + 齐亚德·克马迪 + 亚伦-罗布森-8451 + 亚兰肉桂 + 卡尼夫+ ccccjone + 克里斯·卡瓦列罗 + 钴 颜色455nm+ 丹尼斯雷 + 依赖机器人[机器人] 杰布罗克门德尔 杰法迪亚 + 约翰娜·特罗斯特 + 克穆宗古 + 梅科布尔 + MHB143+ 莫罗蒂+ mvirts + 奥马尔·埃尔巴兹 保罗里斯 预提交-ci[bot] 拉吉塔帕 丽贝卡·帕尔默 rmhowe425 罗汉贾因101 十二三斯+ 斯米吉720 srkds+ 泰泽豪 托雷克斯 vbox用户 + 徐子萌+ 亚什布+