1.1.0 的新增内容(2020 年 7 月 28 日)# 这些是 pandas 1.1.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。 增强功能# loc 引发的 KeyErrors 指定缺少标签# 以前,如果调用缺少标签.loc,则会引发 KeyError,表明不再支持此操作。 现在,错误消息还包括缺失标签的列表(最多 10 个项目,显示宽度 80 个字符)。参见GH 34272。 所有 dtypes 现在都可以转换为StringDtype# StringDtype以前,通常仅当数据已经是 onlystr或 nan时才可以声明或转换为( GH 31204 )。 StringDtype现在适用于astype(str)或dtype=str工作的所有情况: 例如,下面的代码现在可以工作: In [1]: ser = pd.Series([1, "abc", np.nan], dtype="string") In [2]: ser Out[2]: 0 1 1 abc 2 <NA> dtype: string In [3]: ser[0] Out[3]: '1' In [4]: pd.Series([1, 2, np.nan], dtype="Int64").astype("string") Out[4]: 0 1 1 2 2 <NA> dtype: string 非单调PeriodIndex部分字符串切片# PeriodIndex现在支持非单调索引的部分字符串切片,镜像DatetimeIndex行为(GH 31096) 例如: In [5]: dti = pd.date_range("2014-01-01", periods=30, freq="30D") In [6]: pi = dti.to_period("D") In [7]: ser_monotonic = pd.Series(np.arange(30), index=pi) In [8]: shuffler = list(range(0, 30, 2)) + list(range(1, 31, 2)) In [9]: ser = ser_monotonic.iloc[shuffler] In [10]: ser Out[10]: 2014-01-01 0 2014-03-02 2 2014-05-01 4 2014-06-30 6 2014-08-29 8 .. 2015-09-23 21 2015-11-22 23 2016-01-21 25 2016-03-21 27 2016-05-20 29 Freq: D, Length: 30, dtype: int64 In [11]: ser["2014"] Out[11]: 2014-01-01 0 2014-03-02 2 2014-05-01 4 2014-06-30 6 2014-08-29 8 2014-10-28 10 2014-12-27 12 2014-01-31 1 2014-04-01 3 2014-05-31 5 2014-07-30 7 2014-09-28 9 2014-11-27 11 Freq: D, dtype: int64 In [12]: ser.loc["May 2015"] Out[12]: 2015-05-26 17 Freq: D, dtype: int64 比较两个DataFrame或两个Series并总结差异# 我们添加了DataFrame.compare()和Series.compare()来比较两个DataFrame或两个Series(GH 30429) In [13]: df = pd.DataFrame( ....: { ....: "col1": ["a", "a", "b", "b", "a"], ....: "col2": [1.0, 2.0, 3.0, np.nan, 5.0], ....: "col3": [1.0, 2.0, 3.0, 4.0, 5.0] ....: }, ....: columns=["col1", "col2", "col3"], ....: ) ....: In [14]: df Out[14]: col1 col2 col3 0 a 1.0 1.0 1 a 2.0 2.0 2 b 3.0 3.0 3 b NaN 4.0 4 a 5.0 5.0 In [15]: df2 = df.copy() In [16]: df2.loc[0, 'col1'] = 'c' In [17]: df2.loc[2, 'col3'] = 4.0 In [18]: df2 Out[18]: col1 col2 col3 0 c 1.0 1.0 1 a 2.0 2.0 2 b 3.0 4.0 3 b NaN 4.0 4 a 5.0 5.0 In [19]: df.compare(df2) Out[19]: col1 col3 self other self other 0 a c NaN NaN 2 NaN NaN 3.0 4.0 请参阅用户指南了解更多详细信息。 允许在 groupby key 中使用 NA # 对于groupby,我们添加了一个dropna关键字DataFrame.groupby()和 ,Series.groupby()以便允许NA在组键中使用值。用户可以定义dropna是否False要 NA在 groupby 键中包含值。默认设置为Truefordropna以保持向后兼容性(GH 3729) In [20]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [21]: df_dropna = pd.DataFrame(df_list, columns=["a", "b", "c"]) In [22]: df_dropna Out[22]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 2 # Default ``dropna`` is set to True, which will exclude NaNs in keys In [23]: df_dropna.groupby(by=["b"], dropna=True).sum() Out[23]: a c b 1.0 2 3 2.0 2 5 # In order to allow NaN in keys, set ``dropna`` to False In [24]: df_dropna.groupby(by=["b"], dropna=False).sum() Out[24]: a c b 1.0 2 3 2.0 2 5 NaN 1 4 参数的默认设置dropna是True这意味着NA不包含在组键中。 用键排序# key我们为DataFrame和排序方法添加了一个参数Series,包括 DataFrame.sort_values()、DataFrame.sort_index()、Series.sort_values()和Series.sort_index()。可以key是任何可调用函数,在执行排序之前逐列应用于用于排序的每一列(GH 27237)。有关详细信息,请参阅带有键的 sort_values和带有键的 sort_index 。 In [25]: s = pd.Series(['C', 'a', 'B']) In [26]: s Out[26]: 0 C 1 a 2 B dtype: object In [27]: s.sort_values() Out[27]: 2 B 0 C 1 a dtype: object 请注意它是如何以大写字母优先排序的。如果我们应用该Series.str.lower() 方法,我们会得到 In [28]: s.sort_values(key=lambda x: x.str.lower()) Out[28]: 1 a 2 B 0 C dtype: object 当应用于 a 时DataFrame,它们的键将按列应用于所有列或子集(如果 by指定),例如 In [29]: df = pd.DataFrame({'a': ['C', 'C', 'a', 'a', 'B', 'B'], ....: 'b': [1, 2, 3, 4, 5, 6]}) ....: In [30]: df Out[30]: a b 0 C 1 1 C 2 2 a 3 3 a 4 4 B 5 5 B 6 In [31]: df.sort_values(by=['a'], key=lambda col: col.str.lower()) Out[31]: a b 2 a 3 3 a 4 4 B 5 5 B 6 0 C 1 1 C 2 DataFrame.sort_values()有关更多详细信息,请参阅、 Series.sort_values()和中的示例和文档sort_index()。 Timestamp 构造函数中的折叠参数支持# Timestamp:现在支持根据PEP 495 的仅关键字折叠参数,类似于父datetime.datetime类。它支持接受折叠作为初始化参数并从其他构造函数参数(GH 25057,GH 31338)推断折叠。支持仅限于dateutil时区,因为pytz不支持折叠。 例如: In [32]: ts = pd.Timestamp("2019-10-27 01:30:00+00:00") In [33]: ts.fold Out[33]: 0 In [34]: ts = pd.Timestamp(year=2019, month=10, day=27, hour=1, minute=30, ....: tz="dateutil/Europe/London", fold=1) ....: In [35]: ts Out[35]: Timestamp('2019-10-27 01:30:00+0000', tz='dateutil//usr/share/zoneinfo/Europe/London') 有关使用折叠的更多信息,请参阅用户指南中的折叠小节。 解析 to_datetime 中不同时区的时区感知格式# to_datetime()%Z现在支持解析包含来自不同时区的时区名称 ( ) 和 UTC 偏移量 ( )的格式%z,然后通过设置将它们转换为 UTC utc=True。如果未设置(GH 32792),这将返回DatetimeIndexUTC 时区,而不是Indexdtype 。objectutc=True 例如: In [36]: tz_strs = ["2010-01-01 12:00:00 +0100", "2010-01-01 12:00:00 -0100", ....: "2010-01-01 12:00:00 +0300", "2010-01-01 12:00:00 +0400"] ....: In [37]: pd.to_datetime(tz_strs, format='%Y-%m-%d %H:%M:%S %z', utc=True) Out[37]: DatetimeIndex(['2010-01-01 11:00:00+00:00', '2010-01-01 13:00:00+00:00', '2010-01-01 09:00:00+00:00', '2010-01-01 08:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None) In[37]: pd.to_datetime(tz_strs, format='%Y-%m-%d %H:%M:%S %z') Out[37]: Index([2010-01-01 12:00:00+01:00, 2010-01-01 12:00:00-01:00, 2010-01-01 12:00:00+03:00, 2010-01-01 12:00:00+04:00], dtype='object') Grouper 和 resample 现在支持参数 origin 和 offset # Grouper现在DataFrame.resample()支持论点origin和offset。它允许用户控制调整分组的时间戳。 (GH 31809) 分组的箱根据时间序列起点当天的开始进行调整。这对于一天的倍数(如30D)或一天的除数(如90s或1min)的频率非常有效。但它可能会与某些不符合此标准的频率产生不一致。要更改此行为,您现在可以使用参数指定固定时间戳origin。 现在不推荐使用两个参数(更多信息请参见 的文档DataFrame.resample()): base应替换为offset. loffsetDataFrame应通过重采样后直接向索引添加偏移量来替换。 使用的小例子origin: In [38]: start, end = '2000-10-01 23:30:00', '2000-10-02 00:30:00' In [39]: middle = '2000-10-02 00:00:00' In [40]: rng = pd.date_range(start, end, freq='7min') In [41]: ts = pd.Series(np.arange(len(rng)) * 3, index=rng) In [42]: ts Out[42]: 2000-10-01 23:30:00 0 2000-10-01 23:37:00 3 2000-10-01 23:44:00 6 2000-10-01 23:51:00 9 2000-10-01 23:58:00 12 2000-10-02 00:05:00 15 2000-10-02 00:12:00 18 2000-10-02 00:19:00 21 2000-10-02 00:26:00 24 Freq: 7min, dtype: int64 使用默认行为重新采样'start_day'(原点为):2000-10-01 00:00:00 In [43]: ts.resample('17min').sum() Out[43]: 2000-10-01 23:14:00 0 2000-10-01 23:31:00 9 2000-10-01 23:48:00 21 2000-10-02 00:05:00 54 2000-10-02 00:22:00 24 Freq: 17min, dtype: int64 In [44]: ts.resample('17min', origin='start_day').sum() Out[44]: 2000-10-01 23:14:00 0 2000-10-01 23:31:00 9 2000-10-01 23:48:00 21 2000-10-02 00:05:00 54 2000-10-02 00:22:00 24 Freq: 17min, dtype: int64 使用固定原点重新采样: In [45]: ts.resample('17min', origin='epoch').sum() Out[45]: 2000-10-01 23:18:00 0 2000-10-01 23:35:00 18 2000-10-01 23:52:00 27 2000-10-02 00:09:00 39 2000-10-02 00:26:00 24 Freq: 17min, dtype: int64 In [46]: ts.resample('17min', origin='2000-01-01').sum() Out[46]: 2000-10-01 23:24:00 3 2000-10-01 23:41:00 15 2000-10-01 23:58:00 45 2000-10-02 00:15:00 45 Freq: 17min, dtype: int64 如果需要,您可以使用将添加到默认值的参数offset(a )来调整 bin 。Timedeltaorigin 有关完整示例,请参阅:使用原点或偏移量调整 bin 的开始位置。 fsspec 现在用于文件系统处理# 对于读取和写入本地以外的文件系统以及从 HTTP(S) 读取,可选依赖项fsspec将用于分派操作 ( GH 33452 )。这将为已受支持的 S3 和 GCS 存储提供不变的功能,但还会添加对其他几种存储实现的支持,例如Azure Datalake 和 Blob、SSH、FTP、dropbox 和 github。有关文档和功能,请参阅fsspec 文档。 与 S3 和 GCS 接口的现有功能将不会受到此更改的影响,因为fsspec仍会引入与以前相同的软件包。 其他增强功能# 与 matplotlib 3.3.0 的兼容性(GH 34850) IntegerArray.astype()现在支持datetime64数据类型(GH 32538) IntegerArray现在实施该sum操作(GH 33172) 添加pandas.errors.InvalidIndexError(GH 34570)。 添加DataFrame.value_counts()(GH 5377) 添加了一个类来支持操作pandas.api.indexers.FixedForwardWindowIndexer()期间的前Windows口。rolling 添加了一个pandas.api.indexers.VariableOffsetWindowIndexer()类来支持rolling具有非固定偏移量的操作(GH 34994) describe()现在包含一个datetime_is_numeric关键字来控制如何汇总日期时间列(GH 30164,GH 34798) Styler现在可以更有效地渲染 CSS,其中多个单元格具有相同的样式(GH 30876) highlight_null()现在接受subset参数(GH 31345) 当直接写入 sqlite 连接时,DataFrame.to_sql()现在支持该multi方法(GH 29921) pandas.errors.OptionError现在暴露于pandas.errors(GH 27553) 添加api.extensions.ExtensionArray.argmax()和api.extensions.ExtensionArray.argmin()(GH 24382) timedelta_range()start现在将在通过、stop和periods( GH 32377 )时推断频率 IntervalIndex现在支持位置切片(GH 31658)step > 1 Series.str现在有一个fullmatch方法可以将正则表达式与 的每一行中的整个字符串进行匹配Series,类似于re.fullmatch( GH 32806 )。 DataFrame.sample()现在还允许将类似数组和 BitGenerator 对象作为种子传递random_state(GH 32503) Index.union()如果内部对象不可排序,现在将引发RuntimeWarning对象。MultiIndex通过sort=False抑制此警告(GH 33015) 添加Series.dt.isocalendar()并DatetimeIndex.isocalendar()返回DataFrame根据 ISO 8601 日历(GH 33206、GH 34392)计算的年、周和日。 该方法现在支持 pyarrow 0.17 ( GH 33422 )DataFrame.to_feather()中添加的附加关键字参数(例如设置压缩) 。 现在cut()将接受ordered默认参数ordered=True。如果ordered=False没有提供标签,则会出现错误(GH 33141) DataFrame.to_csv()、DataFrame.to_pickle()、 和现在支持在使用和协议DataFrame.to_json()时传递压缩参数的字典。这可用于设置自定义压缩级别,例如 (GH 33196)gzipbz2df.to_csv(path, compression={'method': 'gzip', 'compresslevel': 1} melt()已获得一个ignore_index(默认True)参数,如果设置为False,则可防止该方法删除索引 ( GH 17440 )。 Series.update()现在接受可以强制为 a 的对象Series,例如dict和,镜像( GH 33215 )list的行为DataFrame.update() DataFrameGroupBy.transform()并DataFrameGroupBy.aggregate()获得了支持使用(GH 32854,GH 33388)执行函数的engine参数engine_kwargsNumba Resampler.interpolate()现在支持 SciPy 插值方法scipy.interpolate.CubicSpline作为方法cubicspline( GH 33670 ) DataFrameGroupBy现在SeriesGroupBy实施sample在组内进行随机抽样的方法(GH 31775) DataFrame.to_numpy()现在支持na_value关键字来控制输出数组中的 NA 哨兵 ( GH 33820 ) 添加api.extension.ExtensionArray.equals到扩展数组接口,类似于Series.equals()(GH 27081) 支持的最低 dta 版本已增加到 105 英寸read_stata()和StataReader( GH 26667 )。 to_stata()支持使用compression 关键字参数进行压缩。可以使用包含方法和传递到压缩库的任何其他参数的字符串或字典来推断或显式设置压缩。压缩也被添加到低级 Stata 文件编写器 StataWriter、、StataWriter117和StataWriterUTF8( GH 26599 )。 HDFStore.put()现在接受一个track_times参数。该参数被传递给(GH 32682create_table )的方法。PyTables Series.plot()现在DataFrame.plot()接受xlabel和ylabel参数以在 x 和 y 轴上显示标签 ( GH 9093 )。 制作Rolling并可Expanding迭代(GH 11704 ) 制作了option_context一个contextlib.ContextDecorator,它允许它用作整个函数的装饰器(GH 34253)。 DataFrame.to_csv()现在Series.to_csv()接受一个errors论点(GH 22610) DataFrameGroupBy.groupby.transform()现在允许func是pad,backfill并且cumcount(GH 31269)。 read_json()现在接受一个nrows参数。 (GH 33916)。 DataFrame.hist()、Series.hist()、core.groupby.DataFrameGroupBy.hist()、 并core.groupby.SeriesGroupBy.hist()获得了legend论证。设置为 True 可在直方图中显示图例。 (GH 6279) concat()现在append()保留扩展数据类型,例如,将可为空的整数列与 numpy 整数列组合将不再产生对象数据类型,但保留整数数据类型(GH 33607、GH 34339、GH 34095)。 read_gbq()现在允许禁用进度条(GH 33360)。 read_gbq()现在支持( GH 34639max_results )中的 kwarg 。pandas-gbq DataFrame.cov()现在Series.cov()支持一个新参数ddof来支持 delta 自由度,如相应的 numpy 方法 ( GH 34611 ) 中所示。 DataFrame.to_html()andDataFrame.to_string()的col_space参数现在接受列表或字典来仅更改某些特定列的宽度(GH 28917)。 DataFrame.to_excel()现在还可以编写 OpenOffice 电子表格 (.ods) 文件 ( GH 27222 ) explode()现在接受ignore_index重置索引,类似于pd.concat()或DataFrame.sort_values()( GH 34932 )。 DataFrame.to_markdown()现在Series.to_markdown()接受index参数作为 tabulate 的别名showindex( GH 32667 ) read_csv()现在接受“0”、“0.0”、“1”、“1.0”等字符串值,可转换为可为空的布尔数据类型(GH 34859) ExponentialMovingWindow现在支持一个times参数,允许mean使用由时间戳间隔的观察值进行计算times(GH 34839) DataFrame.agg()现在Series.agg()接受命名聚合来重命名输出列/索引。 (GH 26513) compute.use_numba现在作为配置选项存在,在可用时利用 numba 引擎(GH 33966、GH 35374) Series.plot()现在支持不对称误差线。以前,如果收到带有和/或Series.plot()错误值的“2xN”数组,则会镜像左/下值(第一行),而忽略右/上值(第二行)。现在,第一行代表左/下误差值,第二行代表右/上误差值。 ( GH 9536 )yerrxerr 值得注意的错误修复# 这些错误修复可能会带来显着的行为变化。 MultiIndex.get_indexer正确解释method论证# 这会将MultiIndex.get_indexer()withmethod='backfill'或的行为恢复method='pad'到 pandas 0.23.0 之前的行为。特别是,MultiIndex 被视为元组列表,并且根据这些元组列表的顺序进行填充或回填(GH 29896)。 作为一个例子,给出: In [47]: df = pd.DataFrame({ ....: 'a': [0, 0, 0, 0], ....: 'b': [0, 2, 3, 4], ....: 'c': ['A', 'B', 'C', 'D'], ....: }).set_index(['a', 'b']) ....: In [48]: mi_2 = pd.MultiIndex.from_product([[0], [-1, 0, 1, 3, 4, 5]]) df重新索引withmi_2和 using 的区别method='backfill'可以在这里看到: 熊猫 >= 0.23,< 1.1.0: In [1]: df.reindex(mi_2, method='backfill') Out[1]: c 0 -1 A 0 A 1 D 3 A 4 A 5 C 熊猫 <0.23,>= 1.1.0 In [49]: df.reindex(mi_2, method='backfill') Out[49]: c 0 -1 A 0 A 1 B 3 C 4 D 5 NaN df重新索引withmi_2和 using 的区别method='pad'可以在这里看到: 熊猫 >= 0.23,< 1.1.0 In [1]: df.reindex(mi_2, method='pad') Out[1]: c 0 -1 NaN 0 NaN 1 D 3 NaN 4 A 5 C 熊猫 < 0.23,>= 1.1.0 In [50]: df.reindex(mi_2, method='pad') Out[50]: c 0 -1 NaN 0 A 1 A 3 C 4 D 5 D 失败的基于标签的查找总是引发 KeyError # 标签查找series[key],series.loc[key]用于根据键的类型和 的类型frame.loc[key] 来引发KeyError或。这些现在持续提高(GH 31867)TypeErrorIndexKeyError In [51]: ser1 = pd.Series(range(3), index=[0, 1, 2]) In [52]: ser2 = pd.Series(range(3), index=pd.date_range("2020-02-01", periods=3)) 以前的行为: In [3]: ser1[1.5] ... TypeError: cannot do label indexing on Int64Index with these indexers [1.5] of type float In [4] ser1["foo"] ... KeyError: 'foo' In [5]: ser1.loc[1.5] ... TypeError: cannot do label indexing on Int64Index with these indexers [1.5] of type float In [6]: ser1.loc["foo"] ... KeyError: 'foo' In [7]: ser2.loc[1] ... TypeError: cannot do label indexing on DatetimeIndex with these indexers [1] of type int In [8]: ser2.loc[pd.Timestamp(0)] ... KeyError: Timestamp('1970-01-01 00:00:00') 新行为: In [3]: ser1[1.5] ... KeyError: 1.5 In [4] ser1["foo"] ... KeyError: 'foo' In [5]: ser1.loc[1.5] ... KeyError: 1.5 In [6]: ser1.loc["foo"] ... KeyError: 'foo' In [7]: ser2.loc[1] ... KeyError: 1 In [8]: ser2.loc[pd.Timestamp(0)] ... KeyError: Timestamp('1970-01-01 00:00:00') 类似地,如果传递了不兼容的密钥,并且如果传递了丢失的密钥,DataFrame.at()则将Series.at()引发 aTypeError而不是 a ,匹配( GH 31722 )的行为ValueErrorKeyError.loc[] 多索引上的整数查找失败引发 KeyError # 当索引的第一级中不存在一个或多个整数键时,MultiIndex使用具有整数 dtype 第一级的整数进行索引错误地失败( GH 33539)KeyError In [53]: idx = pd.Index(range(4)) In [54]: dti = pd.date_range("2000-01-03", periods=3) In [55]: mi = pd.MultiIndex.from_product([idx, dti]) In [56]: ser = pd.Series(range(len(mi)), index=mi) 以前的行为: In [5]: ser[[5]] Out[5]: Series([], dtype: int64) 新行为: In [5]: ser[[5]] ... KeyError: '[5] not in index' DataFrame.merge()保留右框架的行顺序# DataFrame.merge()现在在执行右合并时保留右帧的行顺序(GH 27453) In [57]: left_df = pd.DataFrame({'animal': ['dog', 'pig'], ....: 'max_speed': [40, 11]}) ....: In [58]: right_df = pd.DataFrame({'animal': ['quetzal', 'pig'], ....: 'max_speed': [80, 11]}) ....: In [59]: left_df Out[59]: animal max_speed 0 dog 40 1 pig 11 In [60]: right_df Out[60]: animal max_speed 0 quetzal 80 1 pig 11 以前的行为: >>> left_df.merge(right_df, on=['animal', 'max_speed'], how="right") animal max_speed 0 pig 11 1 quetzal 80 新行为: In [61]: left_df.merge(right_df, on=['animal', 'max_speed'], how="right") Out[61]: animal max_speed 0 quetzal 80 1 pig 11 当某些列不存在时分配给 DataFrame 的多个列# DataFrame当某些列不存在时,对 a 的多个列进行赋值会预先将值分配给最后一列。现在,将使用正确的值构造新列。 (GH 13658) In [62]: df = pd.DataFrame({'a': [0, 1, 2], 'b': [3, 4, 5]}) In [63]: df Out[63]: a b 0 0 3 1 1 4 2 2 5 以前的行为: In [3]: df[['a', 'c']] = 1 In [4]: df Out[4]: a b 0 1 1 1 1 1 2 1 1 新行为: In [64]: df[['a', 'c']] = 1 In [65]: df Out[65]: a b c 0 1 3 1 1 1 4 1 2 1 5 1 跨 groupby 减少的一致性# 使用DataFrame.groupby()withas_index=True和聚合nunique会将分组列包含在结果的列中。现在,分组列仅出现在索引中,与其他缩减一致。 (GH 32579) In [66]: df = pd.DataFrame({"a": ["x", "x", "y", "y"], "b": [1, 1, 2, 3]}) In [67]: df Out[67]: a b 0 x 1 1 x 1 2 y 2 3 y 3 以前的行为: In [3]: df.groupby("a", as_index=True).nunique() Out[4]: a b a x 1 1 y 1 2 新行为: In [68]: df.groupby("a", as_index=True).nunique() Out[68]: b a x 1 y 2 使用DataFrame.groupby()withas_index=False和函数idxmax, idxmin, mad, nunique, sem, skew, orstd将修改分组列。现在分组列保持不变,与其他缩减一致。 (GH 21090,GH 10355) 以前的行为: In [3]: df.groupby("a", as_index=False).nunique() Out[4]: a b 0 1 1 1 1 2 新行为: In [69]: df.groupby("a", as_index=False).nunique() Out[69]: a b 0 x 1 1 y 2 该方法DataFrameGroupBy.size()以前会忽略as_index=False.现在,分组列作为列返回,使结果成为 aDataFrame而不是 a Series。 (GH 32599) 以前的行为: In [3]: df.groupby("a", as_index=False).size() Out[4]: a x 2 y 2 dtype: int64 新行为: In [70]: df.groupby("a", as_index=False).size() Out[70]: a size 0 x 2 1 y 2 DataFrameGroupby.agg()as_index=False重新标记列时丢失结果# 以前,当该选项设置为 且结果列被重新标记DataFrameGroupby.agg()时,会丢失结果列。在这种情况下,结果值被替换为先前的索引(GH 32240)。as_indexFalse In [71]: df = pd.DataFrame({"key": ["x", "y", "z", "x", "y", "z"], ....: "val": [1.0, 0.8, 2.0, 3.0, 3.6, 0.75]}) ....: In [72]: df Out[72]: key val 0 x 1.00 1 y 0.80 2 z 2.00 3 x 3.00 4 y 3.60 5 z 0.75 以前的行为: In [2]: grouped = df.groupby("key", as_index=False) In [3]: result = grouped.agg(min_val=pd.NamedAgg(column="val", aggfunc="min")) In [4]: result Out[4]: min_val 0 x 1 y 2 z 新行为: In [73]: grouped = df.groupby("key", as_index=False) In [74]: result = grouped.agg(min_val=pd.NamedAgg(column="val", aggfunc="min")) In [75]: result Out[75]: key min_val 0 x 1.00 1 y 0.80 2 z 0.75 apply 和 applymap onDataFrame仅计算第一行/列一次# In [76]: df = pd.DataFrame({'a': [1, 2], 'b': [3, 6]}) In [77]: def func(row): ....: print(row) ....: return row ....: 以前的行为: In [4]: df.apply(func, axis=1) a 1 b 3 Name: 0, dtype: int64 a 1 b 3 Name: 0, dtype: int64 a 2 b 6 Name: 1, dtype: int64 Out[4]: a b 0 1 3 1 2 6 新行为: In [78]: df.apply(func, axis=1) a 1 b 3 Name: 0, dtype: int64 a 2 b 6 Name: 1, dtype: int64 Out[78]: a b 0 1 3 1 2 6 向后不兼容的 API 更改# 添加了check_freq参数到testing.assert_frame_equaland testing.assert_series_equal# 该check_freq参数已添加到testing.assert_frame_equal()pandas testing.assert_series_equal()1.1.0 中,默认为True.testing.assert_frame_equal()现在如果索引没有相同的频率则testing.assert_series_equal()提高。 AssertionErrorpandas 1.1.0之前,没有检查索引频率。 增加了依赖项的最低版本# 更新了一些依赖项的最低支持版本(GH 33718、GH 29766、GH 29723、 pytables >= 3.4.3)。如果安装了,我们现在需要: 包裹 最低版本 必需的 改变了 麻木 1.15.4 X X 皮茨 2015.4 X python-dateutil 2.7.3 X X 瓶颈 1.2.1 数值表达式 2.6.2 pytest(开发) 4.0.2 对于可选库,一般建议使用最新版本。下表列出了当前在 pandas 开发过程中测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为受支持。 包裹 最低版本 改变了 美丽汤4 4.6.0 快速镶木地板 0.3.2 FS规范 0.7.4 GCSFS 0.6.0 X lxml 3.8.0 绘图库 2.2.2 努巴 0.46.0 开放式pyxl 2.5.7 皮箭头 0.13.0 pymysql 0.7.1 pytables 3.4.3 X s3fs 0.4.0 X scipy 1.2.0 X sqlalchemy 1.1.4 阵列 0.8.2 xlrd 1.1.0 XLSX作家 0.9.8 xlwt 1.2.0 pandas-GBQ 1.2.0 X 有关更多信息,请参阅依赖项和可选依赖项。 发展变化# Cython 的最低版本现在是最新的错误修复版本 (0.29.16) ( GH 33334 )。 弃用# Series不推荐使用包含切片(例如 )的单项列表进行查找,并将在未来版本中提出。要么将列表转换为元组,要么直接传递切片(GH 31333)ser[[slice(0, 4)]] DataFrame.mean()并在未来版本中包含DataFrame.median()和列( GH 29941)numeric_only=Nonedatetime64datetime64tz 使用位置切片设置值.loc已被弃用,并将在未来版本中提高。.loc与标签或.iloc位置一起使用( GH 31840 ) DataFrame.to_dict()已弃用接受简称,orient并将在未来版本中提出 ( GH 32515 ) Categorical.to_dense()已弃用并将在未来版本中删除,请改用np.asarray(cat)( GH 32639 ) fastpath构造函数中的关键字已SingleBlockManager弃用,并将在未来版本中删除(GH 33092) 不推荐以insuffixes形式提供。请提供一个元组(GH 33740、GH 34741)。setpandas.merge() Series使用多维索引器对a 进行索引(例如现在返回 an )会引发 a 。在索引之前转换为 NumPy 数组(GH 27837)[:, None]ndarrayFutureWarning Index.is_mixed()已弃用并将在未来版本中删除,请index.inferred_type直接检查(GH 32922) 不推荐将第一个参数以外的任何参数read_html()作为位置参数传递。所有其他参数应作为关键字参数给出(GH 27573)。 不推荐将除path_or_buf(第一个) 之外的任何参数作为位置参数传递。read_json()所有其他参数应作为关键字参数给出(GH 27573)。 read_excel()不推荐将除前两个之外的任何参数作为位置参数传递。所有其他参数应作为关键字参数给出(GH 27573)。 pandas.api.types.is_categorical()已弃用并将在未来版本中删除;使用pandas.api.types.is_categorical_dtype()(GH 33385) Index.get_value()已弃用并将在未来版本中删除(GH 19728) Series.dt.week()已Series.dt.weekofyear()弃用并将在未来版本中删除,请改用Series.dt.isocalendar().week()( GH 33595 ) DatetimeIndex.week()已DatetimeIndex.weekofyear弃用并将在未来版本中删除,请改用DatetimeIndex.isocalendar().week( GH 33595 ) DatetimeArray.week()已DatetimeArray.weekofyear弃用并将在未来版本中删除,请改用DatetimeArray.isocalendar().week( GH 33595 ) DateOffset.__call__()已弃用并将在未来版本中删除,请改用( GH 34171 )offset + other apply_index()已弃用并将在未来版本中删除。使用替代(GH 34580)offset + other DataFrame.tshift()和Series.tshift()已弃用,并将在未来版本中删除,请使用DataFrame.shift()和Series.shift()代替 ( GH 11631 ) Index不推荐使用浮动键对对象进行索引,并且IndexError将来会引发 。您可以手动转换为整数密钥(GH 34191)。 关键字squeezeingroupby()已弃用,并将在未来版本中删除 ( GH 32380 ) 关键字tzinPeriod.to_timestamp()已弃用,并将在未来版本中删除;使用per.to_timestamp(...).tz_localize(tz)(GH 34522) DatetimeIndex.to_perioddelta()已弃用并将在未来版本中删除。使用替代(GH 34853)index - index.to_period(freq).to_timestamp() DataFrame.melt()不推荐接受value_name已存在的 a ,并将在未来版本中删除(GH 34731) center函数中的关键字已DataFrame.expanding()弃用,并将在未来版本中删除(GH 20647) 性能改进# 构造函数的性能改进Timedelta(GH 30543) 构造函数的性能改进Timestamp(GH 30543) DataFrame之间和Series与axis=0( GH 31296 )之间的 Flex 算术操作的性能改进 DataFrame之间和Series与axis=1( GH 33600 )之间的算术操作的性能改进 内部索引方法_shallow_copy()现在将缓存的属性复制到新索引,避免在新索引上再次创建这些属性。这可以加快许多依赖于创建现有索引副本的操作(GH 28584、GH 32640、GH 32669) 使用 构造函数(GH 32821、 GH 32825、GH 32826、GH 32856、GH 32858)创建DataFrame具有稀疏值的矩阵时,性能显着提高。scipy.sparseDataFrame.sparse.from_spmatrix() groupby 方法的性能改进Groupby.first() 和Groupby.last()( GH 34178 ) factorize()可空(整数和布尔)数据类型的性能改进( GH 33064)。 构造对象时的性能改进Categorical(GH 33921) pandas.qcut()修复了和pandas.cut()( GH 33921 )中的性能回归 可空(整数和布尔)数据类型(GH 30982、GH 33261、GH 33442)的归约( sum、prod、min、 )方面的性能改进。max 两个对象之间算术运算的性能改进DataFrame(GH 32779) RollingGroupby( GH 34052 )的性能改进 ( GH 34297 )的算术运算 (、、、) 的sub性能改进addmuldivMultiIndex DataFrame[bool_indexer]当bool_indexer是时的性能改进list(GH 33924) io.formats.style.Styler.render()通过各种方式添加样式(例如io.formats.style.Styler.apply(),io.formats.style.Styler.applymap()或) ,显着提高性能io.formats.style.Styler.bar()(GH 19917) Bug修复# 分类# 传递一个 invalidfill_value来Categorical.take()引发 aValueError而不是TypeError( GH 33660 ) 在诸如or之类的操作中,将 aCategorical与整数类别以及包含缺失值的 float dtype 列结合起来,现在将生成 float 列,而不是对象 dtype 列 ( GH 33607 )concat()append() merge()无法加入非唯一分类索引的错误( GH 28189) 将分类数据传递给Index构造函数时出现错误,并且dtype=object错误地返回 aCategoricalIndex而不是 object-dtype Index( GH 32167 ) 当任一元素缺失时,Categorical比较运算符__ne__会错误地计算结果的错误( GH 32276 )False Categorical.fillna()现在接受参数(GH 32420)Categorical other 的 ReprCategorical没有区分int和str( GH 33676 ) 类似日期时间# int64传递除to之外的整数数据类型现在将引发而不是错误地使用(GH 32255)np.array(period_index, dtype=...)TypeErrorint64 Series.to_timestamp()TypeError现在如果轴不是 a 则引发 a PeriodIndex。之前AttributeError提出了一个(GH 33327) Series.to_period()TypeError现在如果轴不是 a 则引发 a DatetimeIndex。之前AttributeError提出了一个(GH 33327) Period不再接受参数元组freq(GH 34658) Timestamp从不明确的纪元时间构建Timestamp并再次调用构造函数更改了属性的错误Timestamp.value()(GH 24329) DatetimeArray.searchsorted(), TimedeltaArray.searchsorted(),PeriodArray.searchsorted()无法识别非 pandas 标量并错误地提升ValueError而不是TypeError( GH 30950 ) Timestamp在夏令时从冬季切换到夏季之前使用 dateutil 时区构建小于 128 纳秒的错误Timestamp将导致时间不存在 ( GH 31043 ) 错误Period.to_timestamp(),Period.start_time()微秒频率返回的时间戳比正确时间早一纳秒(GH 31475) Timestamp当缺少年、月或日时,会引发令人困惑的错误消息(GH 31200) 构造函数中的错误DatetimeIndex错误地接受bool-dtype 输入(GH 32668) DatetimeIndex.searchsorted()不接受listor作为其参数的错误Series(GH 32762) PeriodIndex()传递Series字符串时引发的错误( GH 26109) Timestamp添加或减go dtype 时的算术np.ndarray错误(timedelta64GH 33296) DatetimeIndex.to_period()在不带参数调用时无法推断频率的错误( GH 33358) DatetimeIndex.tz_localize()在某些情况下错误地保留freq原件freq不再有效的错误( GH 30511) 在某些情况下DatetimeIndex.intersection()丢失和时区的错误( GH 33604)freq DatetimeIndex.get_indexer()对于混合日期时间目标会返回不正确输出的错误( GH 33741) DatetimeIndex某些类型的对象的加法和减法错误DateOffset错误地保留了无效freq属性(GH 33779) 在索引上DatetimeIndex设置属性可能会默默地更改查看相同数据的另一个索引上的属性的错误( GH 33552)freqfreq DataFrame.min()当对用空初始化的对象调用时,并没有DataFrame.max()返回一致的结果Series.min()Series.max()pd.to_datetime() 错误DatetimeIndex.intersection()且TimedeltaIndex.intersection()结果不具有正确的name属性(GH 33904) 错误地允许静默转换具有 dtype 的值( GHDatetimeArray.__setitem__() 33717 )TimedeltaArray.__setitem__()PeriodArray.__setitem__()int64 在某些应该成功的情况下以及在某些应该提高的情况下TimedeltaIndex从Period错误的提高中减go的错误(GH 33883)TypeErrorIncompatibleFrequencyTypeError 在构造具有非 ns 分辨率的只读 NumPy 数组时出现错误,该数组在时间戳范围内转换为对象 dtype,而不是强制转换为Seriesdtype ( GH 34843 )。Indexdatetime64[ns] , , ,freq中的关键字不再允许元组,而是作为字符串传递(GH 34703)Perioddate_range()period_range()pd.tseries.frequencies.to_offset() 将包含标量 tz-aware 的DataFrame.append()a 附加到空结果导致对象列而不是dtype 时出现错误(GH 35038)SeriesTimestampDataFramedatetime64[ns, tz] OutOfBoundsDatetime当时间戳超出实现范围时发出改进的错误消息。 (GH 32967) AbstractHolidayCalendar.holidays()未定义规则时出现错误( GH 31415) 与类似 timedelta 的对象进行比较时Tick出现的比较错误( GH 34088 )TypeError 乘以浮点时的Tick乘法错误( GH 34486)TypeError 时间增量# 构造一个Timedelta高精度整数来四舍五入Timedelta组件时的错误(GH 31354) 分割np.nan或错误返回None时出现错误(GH 31869)TimedeltaNaT Timedelta现在理解µs为微秒的标识符(GH 32899) Timedelta当纳秒非零时,字符串表示现在包括纳秒(GH 9309) Timedelta将对象np.ndarray与数据类型进行比较时出现错误timedelta64,错误地将所有条目视为不相等(GH 33441) 错误在timedelta_range()边缘情况下产生了额外的点(GH 30353,GH 33498) 错误在DataFrame.resample()边缘情况下产生了额外的点(GH 30353,GH 13022,GH 33498) 处理 timedelta 时DataFrame.resample()忽略参数的错误( GH 7687,GH 33498)loffset 错误Timedelta并pandas.to_timedelta()忽略了unit字符串输入的参数(GH 12136) 时区# 时区名称(例如)无法正确解析的to_datetime()错误(GH 33133)infer_datetime_format=TrueUTC 数字# 错误在于DataFrame.floordiv()不像(GH 31271)axis=0那样处理除以零Series.floordiv() 错误地to_numeric()使用字符串参数"uint64"并errors="coerce"默默地失败(GH 32394) 错误to_numeric()导致downcast="unsigned"空数据失败(GH 32493) 错误DataFrame.mean()以及dtype 或numeric_only=False列错误地提升(GH 32426)datetime64PeriodDtypeTypeError DataFrame.count()包含NaN 的level="foo"索引级别中的错误"foo"会导致分段错误(GH 21824) 错误DataFrame.diff()返回axis=1混合数据类型的不正确结果(GH 32995) 使用(GH 33803)处理可为空整数列时出现错误DataFrame.corr()并引发错误DataFrame.cov()pandas.NA 具有重复标签的非重叠列的对象之间的算术运算错误DataFrame导致无限循环(GH 35194) object-dtype 对象和dtype 对象之间的加法DataFrame和Series减法错误( GH 33824 )datetime64 Index.difference()比较 aFloat64Index和对象时给出不正确结果的错误Index( GH 35217 ) dtypes(GH 34520,GH 32651)的DataFrame减少(例如df.min(),df.max())中的错误ExtensionArray Series.interpolate()现在DataFrame.interpolate()如果limit_directionis 'forward'or 'both'and methodis 'backfill'or 'bfill'is or and limit_directionis or ( GH 34746 )'backward''both'method'pad''ffill' 转换# Series使用大端 dtype 构建 NumPy 数组时出现错误datetime64( GH 29684 ) Timedelta具有大纳秒关键字值的构造错误( GH 32402) 构造中的错误DataFrame,其中集合将被复制而不是提升(GH 32582) 构造DataFrame函数不再接受对象列表DataFrame。由于 NumPy 的更改,DataFrame对象现在始终被视为 2D 对象,因此对象列表DataFrame被视为 3D,并且构造函数不再接受DataFrame( GH 32289 )。 DataFrame使用列表启动框架并columns使用嵌套列表进行分配时出现错误MultiIndex(GH 32173) 改进了创建新索引时列表构造无效的错误消息(GH 35190) 字符串# astype()将“字符串”数据类型数据转换为可为空的整数数据类型时,方法中存在错误( GH 32450)。 min修复了采用or maxof aStringArray或SerieswithStringDtype类型时会出现的问题。 (GH 31746) Series.str.cat()当其他人有类型时返回NaN输出的错误Index(GH 33425) pandas.api.dtypes.is_string_dtype()不再错误地将分类系列识别为字符串。 间隔# IntervalArray设置值时错误地允许更改基础数据的错误( GH 32782 ) 索引# DataFrame.xs()TypeError现在,如果level提供了关键字并且轴不是 a ,则引发 a MultiIndex。之前AttributeError提出了一个(GH 33610) DatetimeIndex在接近年末、季度或月末时,部分时间戳的切片中的错误会导致高分辨率索引下降( GH 31064) PeriodIndex.get_loc()处理高分辨率字符串的错误与PeriodIndex.get_value()( GH 31172 )不同 在( GH 31329 )中查找整数时出现错误Series.at()且不DataFrame.at()匹配行为.locFloat64Index 包含前导条目时PeriodIndex.is_monotonic()错误返回的错误( GH 31437 )TrueNaT 使用转换的整数密钥而不是用户传递的密钥DatetimeIndex.get_loc()引发错误( GH 31425)KeyError 在某些对象数据类型情况下错误返回而不是Series.xs()错误返回( GH 31630)Timestampdatetime64 在某些对象数据类型情况下错误返回而不是DataFrame.iat()错误返回( GH 32809)Timestampdatetime DataFrame.at()当列或索引不唯一时出现错误( GH 33041) 在非全整数的对象数据类型上使用整数键进行索引时的Series.loc()错误(GH 31905)DataFrame.loc()Index 重复列错误地为所有匹配列设置值(DataFrame.iloc.__setitem__()GH 15686、GH 22036)DataFrame 错误地使用、DataFrame.loc()或错误地允许查找不匹配的类似日期时间的 dtypes ( GH 32650 )Series.loc()DatetimeIndexTimedeltaIndexPeriodIndex Series.__getitem__()使用非标准标量进行索引时存在错误,例如np.dtype(GH 32684) 构造函数中存在错误Index,其中针对 NumPy 标量引发了无用的错误消息 ( GH 33017 ) DataFrame.lookup()错误地提出“AttributeError何时”frame.index或frame.columns“不唯一”的错误;现在将引发一个ValueError有用的错误消息(GH 33041) 无法在区间中添加或减goIntervala 的错误( GH 32023 )TimedeltaTimestamp 复制后未使 _item_cache 无效的错误DataFrame.copy()导致复制后值更新无法反映(GH 31784) 修复了提供值时的回归DataFrame.loc()和Series.loc()抛出错误( GH 32395)datetime64[ns, tz] 如果第一级中不存在该密钥,Series.__getitem__()则整数密钥和MultiIndex前导整数级别的错误将无法引发( GH 33355)KeyError 切片DataFrame.iloc()单个列时出现错误(例如)返回无效结果(GH 32957)DataFrameExtensionDtypedf.iloc[:, :1] 将元素设置为空时出现错误DatetimeIndex.insert()并TimedeltaIndex.insert()导致索引freq丢失Series(GH 33573) 使用Series.__setitem__()一个IntervalIndex和一个类似列表的整数键(GH 33473) Series.__getitem__()允许使用np.ndarray, Index,Series索引器丢失标签但不允许的错误list,这些现在都会引发KeyError(GH 33646) DataFrame.truncate()索引Series.truncate()被假定为单调递增的错误( GH 33756 ) 使用表示日期时间的字符串列表进行索引失败DatetimeIndex或PeriodIndex(GH 11278) Series.at()与 a 一起使用时的错误MultiIndex会在有效输入上引发异常(GH 26989) DataFrame.loc()值字典中的错误将 dtypeint为float( GH 34573 )的列更改为 Series.loc()与 a 一起使用时的错误MultiIndex会IndexingError在访问None值时引发 an ( GH 34318 ) 错误DataFrame.reset_index()并且Series.reset_index()不会在空DataFrame或Series带有MultiIndex(GH 19602)的情况下保留数据类型 使用条目上的键进行错误Series和DataFrame索引(GH 35114)timeDatetimeIndexNaT 丢失的# 现在调用fillna()空对象Series可以正确返回浅复制对象。该行为现在与 一致Index,DataFrame且非空Series( GH 32543 )。 Series.replace()当参数的to_replace类型为 dict/list 并用于Series包含时,错误<NA>会引发TypeError.该方法现在通过<NA>在进行替换比较时忽略值来处理此问题(GH 32621) 使用可空布尔数据类型和(GH 33253)错误地返回any()所有或所有值all()<NA>FalseTrueskipna=False 澄清了有关使用 进行插值的文档method=akima。该der参数必须是标量或None(GH 33426) DataFrame.interpolate()现在使用正确的轴约定。以前沿列插值会导致沿索引插值,反之亦然。此外,使用方法pad、ffill和进行插值与使用这些方法(GH 12918,GH 29146)相同bfillbackfillDataFrame.fillna() DataFrame.interpolate()当调用字符串类型的列名时,错误DataFrame会抛出 ValueError。该方法现在独立于列名的类型(GH 33956) NA现在可以使用格式规范传递到格式字符串。例如,"{:.1f}".format(pd.NA)之前会引发 a ValueError,但现在将返回字符串"<NA>"( GH 34740 ) 无效时Series.map()不加注的错误na_action(GH 32815) 多重索引# DataFrame.swaplevels()TypeError现在如果轴不是 a 则引发 a MultiIndex。之前AttributeError提出了一个(GH 31126) 与.Dataframe.loc()MultiIndex返回值的顺序与给定输入的顺序不同(GH 22797) In [79]: df = pd.DataFrame(np.arange(4), ....: index=[["a", "a", "b", "b"], [1, 2, 1, 2]]) ....: # Rows are now ordered as the requested keys In [80]: df.loc[(['b', 'a'], [2, 1]), :] Out[80]: 0 b 2 3 1 2 a 2 1 1 0 Bug inMultiIndex.intersection()时不能保证保持顺序sort=False。 ( GH 31325 ) 错误DataFrame.truncate()是删除MultiIndex名字。 (GH 34564) In [81]: left = pd.MultiIndex.from_arrays([["b", "a"], [2, 1]]) In [82]: right = pd.MultiIndex.from_arrays([["a", "b", "c"], [1, 2, 3]]) # Common elements are now guaranteed to be ordered by the left side In [83]: left.intersection(right, sort=False) Out[83]: MultiIndex([('b', 2), ('a', 1)], ) 连接两个MultiIndex而不指定不同列的级别时出现错误。返回索引器参数被忽略。 (GH 34074) IO # 将 aset作为names参数传递给pandas.read_csv(), pandas.read_table(), orpandas.read_fwf()将引发(GH 34946)ValueError: Names should be an ordered collection. display.precision为零时打印输出中的错误。 (GH 20359) read_json()当 json 包含大数字字符串时发生整数溢出的错误。 (GH 30320) read_csv()ValueError现在,当参数header和prefix两者都不是时,将提出 a None。 (GH 27394) 当S3 URI ( GH 28375 )时DataFrame.to_json()出现错误NotFoundErrorpath_or_buf DataFrame.to_parquet()覆盖 pyarrow 默认值的 错误coerce_timestamps;遵循 pyarrow 的默认值允许使用version="2.0"(GH 31652)写入纳秒时间戳。 与关键字 ( GH 31396 )结合使用时read_csv()会引发错误TypeErrorsep=Nonecomment 当从 Python 2 编写的固定格式读取 Python 3 中的 a 时,该错误HDFStore导致它设置为列int64的 dtype ( GH 31750)datetime64DataFrame read_sas()现在处理的日期和日期时间大于Timestamp.max将它们作为datetime.datetime对象返回的日期和日期时间(GH 20927) DataFrame.to_json()对象无法Timedelta正确序列化的错误date_format="iso"(GH 28256) read_csv()ValueError当传入的列名在( GH 31251 )parse_dates中丢失时,将引发 aDataframe read_excel()具有高代理项的 UTF-8 字符串会导致分段违规的错误 ( GH 23809 ) 错误read_csv()导致空文件上的文件描述符泄漏(GH 31488) read_csv()当标题行和数据行之间存在空行时,错误会导致段错误( GH 28071) 错误read_csv()是在权限问题上引发了误导性异常(GH 23784) 错误read_csv()是提出了一个IndexError时间header=None和两个额外的数据列 从 Google Cloud Storage 读取文件时read_sas()出现错误( GH 33069)AttributeError 保存超出范围的日期时引发的DataFrame.to_sql()错误(GH 26761)AttributeError 错误read_excel()未能正确处理 OpenDocument 文本单元格中的多个嵌入空格。 (GH 32207) 将布尔值读入时read_json()会引发错误。 (GH 31464)TypeErrorlistSeries pandas.io.json.json_normalize()由 指定的位置record_path不指向数组的错误。 (GH 26284) pandas.read_hdf()加载不受支持的 HDF 文件时有更明确的错误消息 ( GH 9539 ) 读取 s3 或 http 文件路径时read_feather()引发错误( GH 29055 )ArrowIOError 错误to_excel()无法处理列名称render并引发错误KeyError(GH 34331) 当 SQL 语句包含字符且不存在参数时,某些 DB-API 驱动程序execute()会出现错误( GH 34211)ProgrammingError% StataReader()使用迭代器读取数据时导致分类变量具有不同数据类型的错误。 (GH 31544) HDFStore.keys()现在有一个可选include参数,允许检索所有本机 HDF5 表名称 ( GH 29916 ) TypeError引发的异常read_csv()和read_table()显示为parser_f传递意外的关键字参数时(GH 25648) read_excel()ODS 文件中的错误删除了 0.0 值 ( GH 27222 ) 错误ujson.encode()是提出一个OverflowError数字大于sys.maxsize(GH 34395)的数字 设置参数时HDFStore.append_to_multiple()出现错误( GH 11238)ValueErrormin_itemsize 当输入中未指定参数时,错误create_table()现在会引发错误(GH 28156)columndata_columns read_json()现在可以在设置lines和时从文件 url 读取行分隔的 json 文件。chunksize DataFrame.to_sql()使用 MySQL读取包含条目的 DataFrame 时出现的错误-np.inf现在更加明确ValueError( GH 34431 ) 大写文件扩展名未由 read_* 函数解压缩的错误 ( GH 35164 ) 错误在于read_excel()提出了一个TypeError何时header=None并index_col给出为list(GH 31783) 在( GH 34748 )read_excel()的标头中使用日期时间值的错误MultiIndex read_excel()不再接受**kwds参数。这意味着传入关键字参数chunksize现在会引发 a TypeError(之前引发了 a NotImplementedError),而传入关键字参数encoding现在会引发 a TypeError( GH 34464 ) 错误DataFrame.to_records()是在时区感知datetime64列中错误地丢失了时区信息(GH 32535) 绘图# DataFrame.plot()线条/条形现在接受字典颜色(GH 8193)。 DataFrame.plot.hist()权重不适用于多列的错误( GH 33173) 、、和( GH 30346 )的错误DataFrame.boxplot()和DataFrame.plot.boxplot()丢失颜色属性medianpropswhiskerpropscappropsboxprops 忽略参数DataFrame.hist()顺序的错误( GH 29235)column 错误在于DataFrame.plot.scatter(),当添加多个不同的绘图时cmap,颜色条始终使用第一个cmap(GH 33389) 错误DataFrame.plot.scatter()是向绘图添加颜色条,即使参数c已分配给包含颜色名称的列(GH 34316) 错误pandas.plotting.bootstrap_plot()导致轴混乱和标签重叠(GH 34905) DataFrame.plot.scatter()绘制可变标记大小时,错误导致错误(GH 32904) GroupBy/重新采样/滚动# 使用pandas.api.indexers.BaseIndexerwith count, min, max, median, , skew,现在将为任何单调后代返回正确的结果( GH 32865cov )corrpandas.api.indexers.BaseIndexer DataFrameGroupby.mean()and SeriesGroupby.mean()(与median(), std()and类似)现在如果将不接受的关键字参数传递给它,则var()引发 a 。TypeError之前UnsupportedFunctionCall提出了一个(AssertionError如果min_count传递到median())(GH 31485) 当轴未排序、有重复项并且应用的对象不会改变传入的对象时,会出现错误DataFrameGroupBy.apply()并SeriesGroupBy.apply()引发错误( GH 30667)ValueErrorbyfunc 错误DataFrameGroupBy.transform()会使用转换函数产生不正确的结果(GH 30918) 按多个键分组时出现错误DataFrameGroupBy.transform()并SeriesGroupBy.transform()返回错误的结果,其中一些键是分类的,另一些则不是(GH 32494) 当分组列包含 NaN 时出现错误DataFrameGroupBy.count()并导致分段错误( GH 32841)SeriesGroupBy.count() 聚合布尔值时出现错误DataFrame.groupby()并Series.groupby()产生不一致的类型Series(GH 32894) 当非空值的数量低于可空整数数据类型时DataFrameGroupBy.sum(),将返回大负数的错误( GH 32861)SeriesGroupBy.sum()min_count 错误SeriesGroupBy.quantile()是在可空整数上引发的(GH 33136) 当生成的时区感知在午夜进行 DST 转换时,将在DataFrame.resample()何处引发错误( GH 25758)AmbiguousTimeErrorDatetimeIndex 按具有只读类别的分类列进行分组时会引发DataFrame.groupby()a 的错误,并且( GH 33410 )ValueErrorsort=False DataFrameGroupBy.agg()、SeriesGroupBy.agg()、DataFrameGroupBy.transform()、SeriesGroupBy.transform()、DataFrameGroupBy.resample()和中的错误SeriesGroupBy.resample()未保留子类(GH 28330) SeriesGroupBy.agg()之前的命名聚合中接受任何列名称的错误SeriesGroupBy。现在的行为只允许str调用,否则会引发TypeError。 ( GH 34422 ) 当其中一个键引用空列表时,错误会DataFrame.groupby()丢失名称( GH 32580)Indexagg 指定Rolling.apply()时center=True被忽略的错误( GH 34784)engine='numba' 错误DataFrame.ewm.cov()是抛出AssertionError输入MultiIndex(GH 34440) core.groupby.DataFrameGroupBy.quantile()针对非数字类型引发的错误TypeError而不是删除列(GH 27892) core.groupby.DataFrameGroupBy.transform()当func='nunique'和 列为类型时出现错误datetime64,结果也将是类型datetime64而不是int64(GH 35109) 选择列并聚合时DataFrame.groupby()引发的错误(GH 35246)。AttributeErroras_index=False 错误DataFrameGroupBy.first(),在对多个分组时DataFrameGroupBy.last()会引发不必要的错误(GH 34951)ValueErrorCategoricals 重塑# 影响所有数字和布尔归约方法不返回子类数据类型的错误。 (GH 25596) DataFrame.pivot_table()仅MultiIndexed设置列时出现错误( GH 17038) 错误DataFrame.unstack()并可以在数据Series.unstack()中获取元组名称( GH 19966)MultiIndexed 当且仅定义DataFrame.pivot_table()时出现错误(GH 31016)marginTruecolumn DataFrame.pivot()修复了当columns设置为时不正确的错误消息None。 (GH 30924) 当crosstab()输入为两个Series且具有元组名称时,输出将保留虚拟列MultiIndex作为错误。 (GH 18321) DataFrame.pivot()现在可以获取参数列表index(columnsGH 21425) 当(GH 29879)concat()时不复制结果索引的错误copy=True 错误SeriesGroupBy.aggregate()导致聚合在共享相同名称时被覆盖(GH 30880) 从to转换或转换为dtype 时Index.astype()会丢失属性的错误( GH 32013 )nameFloat64IndexInt64IndexExtensionArray Series.append()TypeError现在,当传递 a或包含( GH 31413 )DataFrame的序列时,将引发 aDataFrame DataFrame.replace()并Series.replace()会引发一个TypeErrorifto_replace不是预期类型的情况。以前replace会默默地失败(GH 18634) Series将一列添加到DataFrame最初删除的位置(使用)的就地操作的错误inplace=True(GH 30484) 即使请求,也DataFrame.apply()使用参数调用回调的错误。 (GH 32423)Seriesraw=True 从具有时区感知数据类型的列DataFrame.pivot_table()创建级别时丢失时区信息的错误( GH 32558)MultiIndex concat()传递非字典映射时的错误objs会引发TypeError( GH 32863 ) DataFrame.agg()SpecificationError现在在尝试聚合不存在的列时提供更多描述性消息( GH 32755) DataFrame.unstack()使用MultiIndex列和行时出现错误MultiIndex(GH 32624、GH 24729和GH 28306) 将字典附加到 aDataFrame而不传递ignore_index=True将引发而不是( GH 30871 )TypeError: Can only append a dict if ignore_index=TrueTypeError: Can only append a :class:`Series` if ignore_index=True or if the :class:`Series` has a name DataFrame.corrwith()、DataFrame.memory_usage()、DataFrame.dot()、 DataFrame.idxmin()、DataFrame.idxmax()、DataFrame.duplicated()、DataFrame.isin()、 DataFrame.count()、中的错误Series.explode(),Series.asof()并且DataFrame.asof()不返回子类类型。 (GH 31331) 错误concat()不允许串联DataFrame和Series重复键(GH 33654) cut()当参数包含重复项时,错误会引发错误labels(GH 33141) 确保仅命名函数可用于eval()( GH 32460 ) 错误Dataframe.aggregate()并Series.aggregate()在某些情况下导致递归循环(GH 34224) melt()修复了熔化MultiIndex柱时会引发on 的错误(GH 34129)col_level > 0KeyErrorid_vars 错误地Series.where()包含一个空的Series和cond具有非 bool dtype 的空 ( GH 34592 ) 修复了具有 dtype 的元素DataFrame.apply()会引发的回归(GH 34529)ValueErrorS 稀疏# 创建一个SparseArray时区感知的数据类型将在删除时区信息之前发出警告,而不是默默地这样做(GH 32501) arrays.SparseArray.from_spmatrix()错误读取 scipy 稀疏矩阵中的错误( GH 31991) 错误地Series.sum()提出SparseArray了一个TypeError(GH 25777) 当由类似列表索引时DataFrame包含全稀疏SparseArray填充的错误( GH 27781,GH 29563)NaN now的 reprSparseDtype包括其属性的 repr fill_value。以前它使用 的fill_value字符串表示形式(GH 34352) 无法将空值DataFrame转换为错误SparseDtype(GH 33113) 错误arrays.SparseArray()是在使用可迭代索引稀疏数据帧时返回不正确的类型(GH 34526,GH 34540) 扩展数组# Series.value_counts()修复了 dtype为空输入时会引发的错误Int64(GH 33317) 修复了将对象与非重叠列concat()连接时产生对象数据类型列而不是保留扩展数据类型时的错误( GH 27692、GH 33027)DataFrame 修复了设置为( GH 33655 )时StringArray.isna()会返回FalseNA 值的错误pandas.options.mode.use_inf_as_naTrue Series修复了EA 数据类型和索引构造中的错误,但没有数据或标量数据失败 ( GH 26469 ) Series.__repr__()修复了导致元素为多维数组的扩展类型崩溃的错误( GH 33770 )。 修复了Series.update()会引发缺失值的 dtypes 的错误 ( ValueErrorGH 33980 )ExtensionArray 修复了未实现的错误StringArray.memory_usage()(GH 33963) 修复了DataFrameGroupBy()忽略min_count可空布尔数据类型上的聚合参数的错误(GH 34051) DataFrame修复了with的构造函数dtype='string'失败的错误(GH 27953、GH 33623) DataFrame设置为标量扩展类型的列被视为对象类型而不是扩展类型的错误( GH 34832 ) 修复了错误IntegerArray.astype()以正确复制蒙版(GH 34931)。 其他# 对对象数据类型的设置操作Index现在始终返回对象数据类型结果(GH 31401) 已修复,如果参数是具有( GH 32670 )的不同子类,pandas.testing.assert_series_equal()则可以正确引发。leftcheck_series_type=True DataFrame.query()在或字符串中获取缺失的属性DataFrame.eval()会引发正确的错误AttributeError(GH 32408) pandas.testing.assert_series_equal()修复了检查数据类型Interval和ExtensionArray操作数check_dtype的错误False(GH 32747) DataFrame.__dir__()在列名中使用 unicode 代理时,错误导致了段错误 ( GH 25509 ) DataFrame.equals()允许Series.equals()子类相等的错误( GH 34402)。 贡献者# 共有 368 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 3vts + 布鲁克斯+ 艾比·波帕 + 艾哈迈德·斯亚里夫·希达亚图拉 + 亚当·W·巴加斯卡塔 + 阿德里安·马斯特罗纳迪 + 艾丹·蒙塔尔 + 阿克巴尔·赛普特里扬 + 阿科斯·弗顿 + 亚历杭德罗·霍尔 + 亚历克斯·霍尔+ 亚历克斯·伊特克斯 + 亚历克斯·科科 阿里·麦克马斯特 + 阿尔瓦罗·阿莱曼 + 艾米·格雷厄姆 + 安德鲁·舍恩菲尔德 + 安德鲁·舒曼斯基 + 安德鲁·维特斯卡 + 安吉拉·安布罗兹 安贾利·辛格 + 安娜·达格利斯 安东尼·米尔伯恩 + 安东尼·李 + 阿里·索斯诺夫斯基 + Akka迪普·阿迪卡里 + 阿鲁尼姆·萨穆德拉 + 阿什坎+ 阿什温·普拉卡什·纳尔瓦德 + 阿什温·斯里纳斯 + 努卡利亚敦 + 阿亚潘+ 艾拉·汗 + 巴特+ 巴特·布罗尔 + 刘本杰明·贝尔 + 本杰明·费舍尔 + 巴拉特·拉古纳坦 布拉德利骰子 + 布伦丹·沙利文 + 布莱恩·斯特兰德 + 卡斯滕·范韦尔登+ 夏蒙·萨马 + 克里斯·罗博 + 克里斯蒂安·查瓦拉 克里斯托弗·惠兰 克里斯托·彼得罗普洛斯 + 徐传柱 关闭选择 + 克莱门特·罗伯特 + 库伦E+ 丹·巴森+ 丹尼尔·萨克斯顿 达尼洛·奥尔塔 + 达瓦·伊尔哈姆·哈鲁扎曼 + 戴夫·赫希菲尔德 戴夫·休斯 大卫·鲁凯 + 大卫S+ 迪普亚曼·达塔 丹尼斯·巴克休斯 + 德里克·麦卡蒙德 + 德夫吉特·罗伊 + 黛安·特劳特 迪娜+ 多姆+ 德鲁·塞伯特 + 埃德·阿巴蒂 埃米利亚诺·乔丹 + 埃尔凡·纳里曼 + 埃里克·格罗斯曼 + 埃里克·哈塞 + 埃尔卡姆·乌亚尼克 + 埃文·D+ 埃文·坎特 + 李芳辰 + 法尔汉·雷纳尔多 + 法尔汉·雷纳尔多·胡塔巴拉特 + 弗洛里安·杰特 + 弗雷德·赖斯 + 吉哈哈哈+ 加布里埃尔·莫雷拉 + 加布里埃尔·图图伊 + 加鲁·萨希德 高拉夫·乔汉 + 乔治·哈泽尔 + 金盛+ 乔瓦尼·兰扎尼 + 陈国登 + 格雷厄姆·韦茨勒 + 纪尧姆·勒梅特 吉列姆·桑切斯 + HH-MWB + 哈沙瓦尔丹·巴奇纳 浩斯威 伊恩·伊夫斯 伊克拉尔·阿加洛西·努雷扎 + 欧夫·勒斯蒂格 伊娃·拉金贾 + 京东库巴 杰克·格雷斯曼 + 雅各布·奥斯汀+ 雅各布·德彭 + 雅各布·孔雀 + 杰克·泰 + 杰克·范德普拉斯 + 詹姆斯·科邦-克尔 扬·切尔文卡 + 扬·斯科达 陈简+ 让-弗朗索瓦·辛克 + 让德森·巴罗斯·坎迪多 + 杰夫·雷巴克 杰里德·多明格斯-特鲁希略 + 杰里米·申德尔 杰西·法纳姆 嘉祥 宋志焕 + 若阿金·维加斯 + 乔尔·诺斯曼 约翰·博德利 + 约翰·佩顿 + 乔恩·蒂伦 + 乔里斯·范登博什 何塞·曼努埃尔·马蒂 + 约瑟夫·古利安 + 乔什·迪马斯基 乔伊·巴拉 + 若昂·韦加 + 朱利安·德鲁伊特 + 贾斯汀·埃塞特 + 贾斯汀·郑 KD-开发实验室 + 董凯琪 卡西克·马图尔 + 考沙尔·罗希特 + 陈纪宗 肯·曼考夫 + 肯德尔·马塞 肯尼·黄 + 克坦+ 凯文·安德森 + 凯文·鲍伊 + 凯文·谢泼德 基利安·利雷特 + 西原功起 + 克里希纳·奇武库拉 + 克里希纳赛2020 + 莱斯利+ 刘易斯·考尔斯 + 陈琳达+ 吴林晓 + 卢卡·德尔基亚罗·科斯塔比莱 + 布劳恩斯+ 梅贝尔·维拉尔巴 马布罗尔·艾哈迈德 + 玛杜丽·帕拉尼韦鲁 + 麦诗珍 马尔科姆+ 马克·加西亚 马可·戈雷利 玛丽安·德内斯 + 马丁·比耶德巴克·马德森 + 马丁·杜兰特 + 马丁·弗莱施曼 + 马丁·琼斯 + 马丁·温克尔 玛蒂娜·奥费莱因 + 马夫锌+ 玛丽亚·马里诺 + 马修斯·卡多佐 + 马西斯·费拉多斯 + 马特·罗斯克 马泰奥·费利西 + 马泰奥·桑塔玛丽亚 + 马修·罗斯克 马蒂亚斯·布索尼耶 陈麦克斯 马克斯·哈尔福德 + 玛雅克·比什特 + 梅根丁字裤 + 迈克尔·马里诺 + 米格尔·马克斯 + 迈克·库兹马 穆罕默德·哈斯南·莫辛·拉詹 + 穆罕默德·贾法尔·马什哈迪 + 妈妈是最好的朋友 莫妮卡+ 娜塔莉·詹恩 内特·阿姆斯特朗 + 纳撒尼尔+ 尼克·纽曼 + 尼科·施洛默 + 尼克拉斯·韦伯 + 遗忘范式 + 奥尔加·莱舍夫斯卡 + 奥利维尔·卢格 + 熊猫开发团队 相似之处 + 帕特里克+ 帕特里克·坎多 + 保罗·利利 + 保罗·桑德斯 + 皮尔斯基泽 + 佩德罗·拉罗伊 + 佩德罗·雷伊斯 彼得·布尔 + 彼得·斯坦巴赫 + 潘德一明 + 菲尔·柯林 + 皮埃尔-伊夫·布吉尼翁 + 彼得·卡斯普日克 + 彼得·涅瓦茨尼 + 普拉卡·潘迪 普拉尚特·阿南德 + 普尼萨派 + 阮光 + 拉斐尔·詹姆士三世 + 拉菲夫+ 赖莎DZ + 拉克希特·奈杜 + 拉姆·拉胡姆 + 红色+ 里卡多·阿拉尼斯 + 理查德·沙德拉克 + 里克·德·科特 罗伯特·德弗里斯 罗宾到罗克塞尔 + 罗杰·埃伦斯 + 罗希斯295 + 罗曼·尤尔恰克 罗尔+ 鲁沙布·瓦萨尼 瑞安 瑞安·拿撒勒 SAI SRAVAN Medicherla + 舒布·查特吉 + 萨姆·科汉 萨米拉-g-js + 桑杜·乌尔苏 + 桑阿贡+ 桑托什巴拉18 + 萨西达尔·卡斯图里 + 萨蒂什·库马尔·莫汉 + 索尔·沙纳布鲁克 斯科特·吉甘特 + 塞巴斯蒂安·伯格 + 塞巴斯蒂安·范雷尔 谢尔盖·奇皮加 + 谢尔盖+ 希尔帕苏甘 + 西蒙·吉本斯 西蒙·霍金斯 西蒙·莱格纳 + 索哈姆·蒂瓦里 + 宋文浩+ 苏维克·曼达尔 斯宾塞·克拉克 史蒂芬·雷伯格 + 史蒂芬·施密茨 + 斯蒂恩·范霍伊 史蒂芬·塔贾德 苏丹奥拉兹巴耶夫 + 苏马瑙·萨林 苏拉吉H1 + 苏瓦尤·阿里 + 特尔吉·彼得森 托马斯·J·范 + 托马斯·李 托马斯·史密斯 + 蒂姆·斯瓦斯特 托比亚斯·皮特斯 + 汤姆+ 汤姆·奥格斯普格 乌韦·科恩 瓦伦丁·约文 + 范达纳·艾耶 + 文卡特什·达塔 + 维杰·赛·穆蒂亚拉 + 维卡斯·潘迪 维普尔·拉伊 + 维什瓦姆·潘迪亚 + 弗拉基米尔·别尔库托夫 + 威尔·艾德 威尔·霍姆格伦 威廉+ 威廉·艾德 亚戈·冈萨雷斯 + 小林洋介 + 扎卡里·劳伦斯 + 扎基·比尔法吉 + 泽布·尼科尔斯 + 阿里姆大师1 施舍+ 安迪卡尤苏普 + 安德烈斯麦克尼尔 + 阿维纳什潘查姆 + 贝纳贝尔+ 伯尼·格雷+ 比德万09 + 布洛克+ 克里斯-B1 克莱康特987 + 丹1261 + 大卫·科尔特斯 + 大卫威尔士 + 十进制+ 杜滕莫瑟 + 迪莱克斯42 + 埃尔蒙索米亚特 + 埃皮齐戈尼 + 菲耶特 加布里埃尔vf1 + gdex1+ 格菲扬 大师基兰+ 维沙尔 亚姆什温 贾明-AWS-ospo + 杰布罗克门德尔 杰夫科贝特 + 杰内克斯+ 内核 松冈幸太 + 凯尔克普勒 + 莱德马本 + 链接2xt + manoj_koneni + 玛丽德米特 + 大师皮加+ 马克西姆.歌曲+ 毫克格拉斯德 + 莫阿帐户 + 姆普罗斯谢夫斯卡 尼尔克 恩雷贝纳 ossdev07 + 排虎 潘雅切克 + 帕尔捷夫+ 帕特里克+ 佩德罗阿 + 披萨贼+ 普罗斯特 普凡豪+ 雷贝内斯 丽贝卡·帕尔默 拉沙德拉克 + rjfs + s-谢乐+ 鼠尾草+ 萨贡格普+ 塞勒姆3358 + 沙龙30 + smartsw开发者 + 智能葡萄酒+ 特米恩+ 蒂姆亨德伍德 + 托尔哈西亚尼帕尔 + tonywu1999 茨维卡斯 电视3141 文卡泰什达塔1993 + 维维克拉普特 + 威尔博迪奇 + 威尔佩波 + 扎+ 扎基因陀罗 +