1.3.0 的新增内容(2021 年 7 月 2 日)#

这些是 pandas 1.3.0 中的变化。请参阅发行说明以获取完整的变更日志,包括其他版本的 pandas。

警告

读取新的 Excel 2007+ ( ) 文件时,当选项设置为时.xlsx,默认参数 engine=None现在read_excel()将导致在所有情况下都使用 openpyxl引擎。以前,某些情况会使用 xlrd引擎。有关此更改的背景信息,请参阅 What's new 1.2.0 。io.excel.xlsx.reader"auto"

增强功能#

读取 csv 或 json 文件时自定义 HTTP(s) 标头#

当从 fsspec 未处理的远程 URL(例如 HTTP 和 HTTPS)读取时,传递到的字典storage_options将用于创建请求中包含的标头。这可用于控制用户代理标头或发送其他自定义标头(GH 36688)。例如:

In [1]: headers = {"User-Agent": "pandas"}
In [2]: df = pd.read_csv(
   ...:     "https://download.bls.gov/pub/time.series/cu/cu.item",
   ...:     sep="\t",
   ...:     storage_options=headers
   ...: )

读取和写入 XML 文档#

我们添加了 I/O 支持,以使用 和 读取和呈现XML文档的 浅层版本。使用lxml作为解析器,XPath 1.0 和 XSLT 1.0 都可用。 (GH 27554read_xml()DataFrame.to_xml()

In [1]: xml = """<?xml version='1.0' encoding='utf-8'?>
   ...: <data>
   ...:  <row>
   ...:     <shape>square</shape>
   ...:     <degrees>360</degrees>
   ...:     <sides>4.0</sides>
   ...:  </row>
   ...:  <row>
   ...:     <shape>circle</shape>
   ...:     <degrees>360</degrees>
   ...:     <sides/>
   ...:  </row>
   ...:  <row>
   ...:     <shape>triangle</shape>
   ...:     <degrees>180</degrees>
   ...:     <sides>3.0</sides>
   ...:  </row>
   ...:  </data>"""

In [2]: df = pd.read_xml(xml)
In [3]: df
Out[3]:
      shape  degrees  sides
0    square      360    4.0
1    circle      360    NaN
2  triangle      180    3.0

In [4]: df.to_xml()
Out[4]:
<?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>

有关更多信息,请参阅IO 工具用户指南中的编写 XML 。

造型器增强功能#

我们提供了一些针对 的重点开发Styler。另请参阅 经过修订和改进的Styler 文档( GH 39720GH 39317GH 40493)。

DataFrame 构造函数尊重copy=Falsedict #

将字典传递给DataFramewith时copy=False,将不再制作副本(GH 32960)。

In [1]: arr = np.array([1, 2, 3])

In [2]: df = pd.DataFrame({"A": arr, "B": arr.copy()}, copy=False)

In [3]: df
Out[3]: 
   A  B
0  1  1
1  2  2
2  3  3

df["A"]仍然持有以下观点arr

In [4]: arr[0] = 0

In [5]: assert df.iloc[0, 0] == 0

不通过时的默认行为copy将保持不变,即将进行复制。

PyArrow 支持的字符串数据类型#

我们增强了StringDtype,这是一种专用于字符串数据的扩展类型。 (GH 39908

现在可以storage为 指定关键字选项StringDtype。使用 pandas 选项或使用指定 dtypedtype='string[pyarrow]'来允许 PyArrow 数组而不是 Python 对象的 NumPy 数组支持 StringArray。

PyArrow 支持的 StringArray 需要安装 pyarrow 1.0.0 或更高版本。

警告

string[pyarrow]目前被认为是实验性的。 API 的实现和部分可能会在没有警告的情况下发生更改。

In [6]: pd.Series(['abc', None, 'def'], dtype=pd.StringDtype(storage="pyarrow"))
Out[6]: 
0     abc
1    <NA>
2     def
dtype: string

"string[pyarrow]"您也可以使用别名。

In [7]: s = pd.Series(['abc', None, 'def'], dtype="string[pyarrow]")

In [8]: s
Out[8]: 
0     abc
1    <NA>
2     def
dtype: string

您还可以使用 pandas 选项创建 PyArrow 支持的字符串数组。

In [9]: with pd.option_context("string_storage", "pyarrow"):
   ...:     s = pd.Series(['abc', None, 'def'], dtype="string")
   ...: 

In [10]: s
Out[10]: 
0     abc
1    <NA>
2     def
dtype: string

通常的字符串访问器方法可以工作。在适当的情况下,DataFrame 的 Series 或列的返回类型也将具有字符串数据类型。

In [11]: s.str.upper()
Out[11]: 
0     ABC
1    <NA>
2     DEF
dtype: string

In [12]: s.str.split('b', expand=True).dtypes
Out[12]: 
0    string[pyarrow]
1    string[pyarrow]
dtype: object

返回整数的字符串访问器方法将返回一个值Int64Dtype

In [13]: s.str.count("a")
Out[13]: 
0       1
1    <NA>
2       0
dtype: Int64

居中的类似日期时间的滚动窗口#

当使用类似日期时间的索引对 DataFrame 和 Series 对象执行滚动计算时,现在可以使用居中的类似日期时间的窗口 ( GH 38780 )。例如:

In [14]: df = pd.DataFrame(
   ....:     {"A": [0, 1, 2, 3, 4]}, index=pd.date_range("2020", periods=5, freq="1D")
   ....: )
   ....: 

In [15]: df
Out[15]: 
            A
2020-01-01  0
2020-01-02  1
2020-01-03  2
2020-01-04  3
2020-01-05  4

In [16]: df.rolling("2D", center=True).mean()
Out[16]: 
              A
2020-01-01  0.5
2020-01-02  1.5
2020-01-03  2.5
2020-01-04  3.5
2020-01-05  4.0

其他增强功能#

值得注意的错误修复#

这些错误修复可能会带来显着的行为变化。

Categorical.unique现在始终保持与原始相同的数据类型#

以前,当Categorical.unique()使用分类数据调用时,新数组中未使用的类别将被删除,从而使新数组的 dtype 与原始数组不同(GH 18291

作为一个例子,给出:

In [17]: dtype = pd.CategoricalDtype(['bad', 'neutral', 'good'], ordered=True)

In [18]: cat = pd.Categorical(['good', 'good', 'bad', 'bad'], dtype=dtype)

In [19]: original = pd.Series(cat)

In [20]: unique = original.unique()

以前的行为

In [1]: unique
['good', 'bad']
Categories (2, object): ['bad' < 'good']
In [2]: original.dtype == unique.dtype
False

新行为

In [21]: unique
Out[21]: 
['good', 'bad']
Categories (3, object): ['bad' < 'neutral' < 'good']

In [22]: original.dtype == unique.dtype
Out[22]: True

保留#中的数据类型DataFrame.combine_first()

DataFrame.combine_first()现在将保留 dtypes ( GH 7509 )

In [23]: df1 = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=[0, 1, 2])

In [24]: df1
Out[24]: 
   A  B
0  1  1
1  2  2
2  3  3

In [25]: df2 = pd.DataFrame({"B": [4, 5, 6], "C": [1, 2, 3]}, index=[2, 3, 4])

In [26]: df2
Out[26]: 
   B  C
2  4  1
3  5  2
4  6  3

In [27]: combined = df1.combine_first(df2)

以前的行为

In [1]: combined.dtypes
Out[2]:
A    float64
B    float64
C    float64
dtype: object

新行为

In [28]: combined.dtypes
Out[28]: 
A    float64
B      int64
C    float64
dtype: object

Groupby 方法 agg 和 Transform 不再更改可调用对象的返回数据类型#

以前,当参数可调用时,方法DataFrameGroupBy.aggregate()SeriesGroupBy.aggregate()DataFrameGroupBy.transform()和 可能会强制转换结果数据类型 ,这可能会导致不良结果 ( GH 21240 )。如果结果是数字,并且转换回输入数据类型不会更改 测量的任何值,则会发生转换。现在没有发生这样的铸造。SeriesGroupBy.transform()funcnp.allclose

In [29]: df = pd.DataFrame({'key': [1, 1], 'a': [True, False], 'b': [True, True]})

In [30]: df
Out[30]: 
   key      a     b
0    1   True  True
1    1  False  True

以前的行为

In [5]: df.groupby('key').agg(lambda x: x.sum())
Out[5]:
        a  b
key
1    True  2

新行为

In [31]: df.groupby('key').agg(lambda x: x.sum())
Out[31]: 
     a  b
key      
1    1  2

floatDataFrameGroupBy.mean()DataFrameGroupBy.median()GDataFrameGroupBy.var()SeriesGroupBy.mean()、 、SeriesGroupBy.median()#的结果SeriesGroupBy.var()

以前,这些方法可能会根据输入值产生不同的数据类型。现在,这些方法将始终返回浮点数据类型。 (GH 41137

In [32]: df = pd.DataFrame({'a': [True], 'b': [1], 'c': [1.0]})

以前的行为

In [5]: df.groupby(df.index).mean()
Out[5]:
        a  b    c
0    True  1  1.0

新行为

In [33]: df.groupby(df.index).mean()
Out[33]: 
     a    b    c
0  1.0  1.0  1.0

loc使用和#设置值时尝试就地操作iloc

loc当使用或设置整个列时iloc,pandas 会尝试将值插入到现有数据中,而不是创建一个全新的数组。

In [34]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")

In [35]: values = df.values

In [36]: new = np.array([5, 6, 7], dtype="int64")

In [37]: df.loc[[0, 1, 2], "A"] = new

在新行为和旧行为中, 中 的数据values都会被覆盖,但在旧行为中 的 dtypedf["A"]更改为int64

以前的行为

In [1]: df.dtypes
Out[1]:
A    int64
dtype: object
In [2]: np.shares_memory(df["A"].values, new)
Out[2]: False
In [3]: np.shares_memory(df["A"].values, values)
Out[3]: False

在pandas 1.3.0中,df继续与以下人员共享数据values

新行为

In [38]: df.dtypes
Out[38]: 
A    float64
dtype: object

In [39]: np.shares_memory(df["A"], new)
Out[39]: False

In [40]: np.shares_memory(df["A"], values)
Out[40]: True

设置#时切勿就地操作frame[keys] = values

当使用新数组设置多个列时,将替换这些键的预先存在的数组,这不会覆盖(GH 39510)。因此,列将保留 的 dtype ,而不会转换为现有数组的 dtype。frame[keys] = valuesvalues

In [41]: df = pd.DataFrame(range(3), columns=["A"], dtype="float64")

In [42]: df[["A"]] = 5

在旧的行为中,5被转换float64并插入到现有的数组支持中df

以前的行为

In [1]: df.dtypes
Out[1]:
A    float64

在新行为中,我们得到一个新数组,并保留一个整数类型5

新行为

In [43]: df.dtypes
Out[43]: 
A    int64
dtype: object

与布尔系列设置一致的铸造#

将非布尔值设置为 aSeries现在dtype=bool一致地转换为dtype=object( GH 38709 )

In [1]: orig = pd.Series([True, False])

In [2]: ser = orig.copy()

In [3]: ser.iloc[1] = np.nan

In [4]: ser2 = orig.copy()

In [5]: ser2.iloc[1] = 2.0

以前的行为

In [1]: ser
Out [1]:
0    1.0
1    NaN
dtype: float64

In [2]:ser2
Out [2]:
0    True
1     2.0
dtype: object

新行为

In [1]: ser
Out [1]:
0    True
1     NaN
dtype: object

In [2]:ser2
Out [2]:
0    True
1     2.0
dtype: object

DataFrameGroupBy.rolling 和 SeriesGroupBy.rolling 不再返回值中的分组列#

现在将从操作结果中删除分组依据列 groupby.rollingGH 32262

In [44]: df = pd.DataFrame({"A": [1, 1, 2, 3], "B": [0, 1, 2, 3]})

In [45]: df
Out[45]: 
   A  B
0  1  0
1  1  1
2  2  2
3  3  3

以前的行为

In [1]: df.groupby("A").rolling(2).sum()
Out[1]:
       A    B
A
1 0  NaN  NaN
1    2.0  1.0
2 2  NaN  NaN
3 3  NaN  NaN

新行为

In [46]: df.groupby("A").rolling(2).sum()
Out[46]: 
       B
A       
1 0  NaN
  1  1.0
2 2  NaN
3 3  NaN

删除了滚动方差和标准差中的人为截断#

Rolling.std()并且Rolling.var()将不再人为地将小于~1e-8~1e-15分别截断为零的结果(GH 37051GH 40448GH 39872)。

但是,当滚动较大的值时,结果中现在可能存在浮点伪影。

In [47]: s = pd.Series([7, 5, 5, 5])

In [48]: s.rolling(3).var()
Out[48]: 
0         NaN
1         NaN
2    1.333333
3    0.000000
dtype: float64

具有 MultiIndex 的 DataFrameGroupBy.rolling 和 SeriesGroupBy.rolling 不再降低结果中的级别#

DataFrameGroupBy.rolling()并且SeriesGroupBy.rolling()将不再降低结果中DataFrame 带有 a 的 a的级别。MultiIndex这可能会导致结果中出现级别重复 MultiIndex,但此更改恢复了版本 1.1.3 中存在的行为(GH 38787GH 38523)。

In [49]: index = pd.MultiIndex.from_tuples([('idx1', 'idx2')], names=['label1', 'label2'])

In [50]: df = pd.DataFrame({'a': [1], 'b': [2]}, index=index)

In [51]: df
Out[51]: 
               a  b
label1 label2      
idx1   idx2    1  2

以前的行为

In [1]: df.groupby('label1').rolling(1).sum()
Out[1]:
          a    b
label1
idx1    1.0  2.0

新行为

In [52]: df.groupby('label1').rolling(1).sum()
Out[52]: 
                        a    b
label1 label1 label2          
idx1   idx1   idx2    1.0  2.0

向后不兼容的 API 更改#

增加了依赖项的最低版本#

更新了一些依赖项的最低支持版本。如果安装了,我们现在需要:

包裹

最低版本

必需的

改变了

麻木

1.17.3

X

X

皮茨

2017.3

X

python-dateutil

2.7.3

X

瓶颈

1.2.1

数值表达式

2.7.0

X

pytest(开发)

6.0

X

mypy(开发)

0.812

X

设置工具

38.6.0

X

对于可选库,一般建议使用最新版本。下表列出了当前在 pandas 开发过程中测试的每个库的最低版本。低于最低测试版本的可选库可能仍然有效,但不被视为受支持。

包裹

最低版本

改变了

美丽汤4

4.6.0

快速镶木地板

0.4.0

X

FS规范

0.7.4

GCSFS

0.6.0

lxml

4.3.0

绘图库

2.2.3

努巴

0.46.0

开放式pyxl

3.0.0

X

皮箭头

0.17.0

X

pymysql

0.8.1

X

pytables

3.5.1

s3fs

0.4.0

scipy

1.2.0

sqlalchemy

1.3.0

X

制表

0.8.7

X

阵列

0.12.0

xlrd

1.2.0

XLSX作家

1.0.2

xlwt

1.3.0

pandas-GBQ

0.12.0

有关更多信息,请参阅依赖项可选依赖项

其他 API 更改#

  • 部分初始化的CategoricalDtype对象(即带有 的对象categories=None)将不再与完全初始化的 dtype 对象进行比较(GH 38516

  • 访问_constructor_expanddimaDataFrame_constructor_sliced在 a 上Series现在引发AttributeError.之前NotImplementedError提出了 a ( GH 38782 )

  • 添加了新的engine**engine_kwargs参数以DataFrame.to_sql()支持其他未来的“SQL 引擎”。目前我们仍然只SQLAlchemy在引擎盖下使用,但计划支持更多引擎,例如turbodbcGH 36893

  • freqPeriodIndex字符串表示中删除了冗余( GH 41653

  • ExtensionDtype.construct_array_type()现在是子类的必需方法而不是可选方法ExtensionDtypeGH 24860

  • 调用hash不可散列的 pandas 对象现在将引发TypeError内置错误消息(例如)。以前它会引发自定义消息,例如.此外,现在将返回(GH 40013unhashable type: 'Series''Series' objects are mutable, thus they cannot be hashedisinstance(<Series>, abc.collections.Hashable)False

  • Styler.from_custom_template()现在有两个新的模板名称参数,并删除了旧的参数name,因为引入了模板继承以更好地解析(GH 42053)。还需要对 Styler 属性进行子类化修改。

建造

  • .pptx和格式的文档.pdf不再包含在轮子或源代码发行版中。 (GH 30741

弃用#

已弃用在 DataFrame 缩减和 DataFrameGroupBy 操作中删除烦人的列#

在 a上调​​用归约(例如、 .min.max.sum(默认),归约引发 a 的列 将被静默忽略并从结果中删除。DataFramenumeric_only=NoneTypeError

此行为已被弃用。在未来的版本中,TypeError将会提高,用户在调用该函数之前将需要仅选择有效的列。

例如:

In [53]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})

In [54]: df
Out[54]: 
   A          B
0  1 2016-01-01
1  2 2016-01-02
2  3 2016-01-03
3  4 2016-01-04

旧行为

In [3]: df.prod()
Out[3]:
Out[3]:
A    24
dtype: int64

未来的行为

In [4]: df.prod()
...
TypeError: 'DatetimeArray' does not implement reduction 'prod'

In [5]: df[["A"]].prod()
Out[5]:
A    24
dtype: int64

类似地,当将函数应用于 时DataFrameGroupBy,函数引发的列TypeError当前会被静默忽略并从结果中删除。

此行为已被弃用。在未来的版本中,TypeError 将会提高,用户在调用该函数之前将需要仅选择有效的列。

例如:

In [55]: df = pd.DataFrame({"A": [1, 2, 3, 4], "B": pd.date_range("2016-01-01", periods=4)})

In [56]: gb = df.groupby([1, 1, 2, 2])

旧行为

In [4]: gb.prod(numeric_only=False)
Out[4]:
A
1   2
2  12

未来的行为

In [5]: gb.prod(numeric_only=False)
...
TypeError: datetime64 type does not support prod operations

In [6]: gb[["A"]].prod(numeric_only=False)
Out[6]:
    A
1   2
2  12

其他弃用#

性能改进#

Bug修复

分类#

类似日期时间#

时间增量#

  • Timedeltanp.timedelta64具有非纳秒单位的对象构建时出现错误timedelta64[ns]GH 38965

  • 构造TimedeltaIndex错误接受np.datetime64("NaT")对象时的错误(GH 39462

  • 从仅包含符号而没有数字的输入字符串构建时出现的错误Timedelta未能引发错误(GH 39710

  • 当传递非纳秒数组时出现错误TimedeltaIndex并且to_timedelta()无法引发,该数组在转换为(GH 40008timedelta64时溢出timedelta64[ns]

时区

  • 表示 UTC 的不同对象中的错误tzinfo不被视为等效(GH 39216

  • dateutil.tz.gettz("UTC")不被识别为与其他代表 UTC 的 tzinfo 等效的错误( GH 39276 )

数字#

转换

字符串#

间隔

  • 使用(GH 38653GH 38741)进行操作时出现错误IntervalIndex.intersection()IntervalIndex.symmetric_difference()始终返回对象数据类型CategoricalIndex

  • IntervalIndex.intersection()当至少一个对象Index具有另一个对象中存在的重复项时返回重复项的错误( GH 38743 )

  • IntervalIndex.union(), IntervalIndex.intersection(), IntervalIndex.difference(),IntervalIndex.symmetric_difference()现在转换为适当的 dtype 而不是在与另一个具有不兼容 dtype 的TypeError操作时引发 a ( GH 39267 )IntervalIndex

  • PeriodIndex.union(), PeriodIndex.intersection(), PeriodIndex.symmetric_difference(),PeriodIndex.difference()现在转换为对象 dtype,而不是在与另一个具有不兼容 dtype 的IncompatibleFrequency操作时引发 ( GH 39306 )PeriodIndex

  • IntervalIndex.is_monotonic()IntervalIndex.get_loc()IntervalIndex.get_indexer_for()和中IntervalIndex.__contains__()存在 NA 值时的错误( GH 41831 )

索引#

  • 当不是单调或设置为(GH 36289GH 31326GH 40862)时出现错误Index.union()MultiIndex.union()删除重复IndexIndexsortFalse

  • 非唯一时CategoricalIndex.get_indexer()无法引发的错误( GH 38372InvalidIndexError

  • IntervalIndex.get_indexer()target索引CategoricalDtype和目标都包含 NA 值时出现错误( GH 41934

  • 当使用布尔列表过滤输入并且要设置的值是具有较低维度的列表时Series.loc()引发的错误( GH 20438ValueError

  • 将许多新列插入到DataFrame导致不正确的后续索引行为的错误(GH 38380

  • 将多个值设置为重复列时DataFrame.__setitem__()引发的错误( GH 15695ValueError

  • 、中的错误DataFrame.loc()Series.loc()以及为字符串切片的非单调返回不正确的元素( GH 33146 )DataFrame.__getitem__()Series.__getitem__()DatetimeIndex

  • DataFrame.reindex()Series.reindex()区感知索引中的 bug会引发TypeErrorformethod="ffill"method="bfill"指定的错误tolerance( GH 38566 )

  • 当需要转换为对象数据类型时,错误地转换DataFrame.reindex()为整数datetime64[ns]或错误地转换为整数( GH 39755timedelta64[ns]fill_value

  • 使用指定列和非空值设置空值时DataFrame.__setitem__()引发错误(GH 38831ValueErrorDataFrameDataFrame

  • 当具有重复列时对唯一列进行操作时DataFrame.loc.__setitem__()引发错误( GH 38521 )ValueErrorDataFrame

  • 使用字典值设置时混合数据类型DataFrame.iloc.__setitem__()中的错误( GH 38335DataFrame.loc.__setitem__()

  • 当提供布尔生成器时出现错误Series.loc.__setitem__()DataFrame.loc.__setitem__()引发( GH 39614KeyError

  • 当提供生成器时出现错误Series.iloc()DataFrame.iloc()引发错误( GH 39614KeyError

  • 当右侧是列数错误的a 时DataFrame.__setitem__(),不引发 a 的错误( GH 38604ValueErrorDataFrame

  • 使用标量索引器设置 a 时Series.__setitem__()引发 a 的错误( GH 38303ValueErrorSeries

  • 当用作输入只有一行时DataFrame.loc(),降低 a 级别的错误( GH 10521MultiIndexDataFrame

  • 当使用现有字符串进行切片时,其中有毫秒(GH 33589DataFrame.__getitem__(),并且Series.__getitem__()总是引发错误KeyErrorIndex

  • 设置timedelta64datetime64数值中的错误Series无法转换为对象数据类型(GH 39086GH 39619

  • Interval将值设置为SeriesDataFrame不匹配的错误IntervalDtype将新值错误地转换为现有的数据类型(GH 39120

  • datetime64将值设置为Series整数 dtype 的错误错误地将 datetime64 值转换为整数 ( GH 39266 )

  • 设置np.datetime64("NaT")为 aSeries时出现错误Datetime64TZDtype,错误地将 timezone-naive 值视为时区感知 ( GH 39769 )

  • 当和被指定但不在( GH 39382 )中时Index.get_loc()不引发错误KeyErrorkey=NaNmethodNaNIndex

  • 插入时区感知索引DatetimeIndex.insert()时错误地将时区原始值视为时区感知时出现错误( GH 39769np.datetime64("NaT")

  • Index.insert()当设置不能保留在现有列中的新列时,错误地引发错误frame.columns,或者在转换为兼容的数据类型时出现错误(Series.reset_index()GH 39068DataFrame.reset_index()

  • RangeIndex.append()错误连接长度为 1 的单个对象的错误( GH 39401 )

  • 错误在于RangeIndex.astype(),当转换为 时CategoricalIndex,类别变为 aInt64Index而不是 a RangeIndex( GH 41263 )

  • 使用布尔索引器将值设置numpy.timedelta64为对象数据类型时出现错误( GH 39488Series

  • Series使用atiat无法转换为对象数据类型将数值设置为布尔数据类型时出现错误( GH 39582

  • 尝试使用行切片进行索引并将列表设置为值时出现错误DataFrame.__setitem__()DataFrame.iloc.__setitem__()引发错误( GH 40440ValueError

  • 当未找到密钥且未完全指定级别时DataFrame.loc()不引发错误( GH 41170KeyErrorMultiIndex

  • DataFrame.loc.__setitem__()当扩展轴中的索引包含重复项时,扩展设置错误地引发错误( GH 40096

  • 当至少一个索引列具有 float 数据类型并且我们检索标量时,转换为 float 会DataFrame.loc.__getitem__()出现错误( GH 41369MultiIndex

  • DataFrame.loc()错误匹配非布尔索引元素的错误( GH 20432

  • 当键存在时,使用np.nanaSeriesDataFrame错误CategoricalIndex地提升索引时出现错误( GH 41933KeyErrornp.nan

  • Series.__delitem__()错误地ExtensionDtype投射到ndarrayGH 40386

  • 传递整数键时返回错误结果DataFrame.at()的错误( GH 41846CategoricalIndex

  • 如果索引器有重复项,则会以错误的顺序DataFrame.loc()返回 a 的错误( GH 40978 )MultiIndex

  • 使用子类作为带有 a 的列名时DataFrame.__setitem__()引发 a 的错误( GH 37366 )TypeErrorstrDatetimeIndex

  • 当给定一个不匹配的a 时PeriodIndex.get_loc(),无法引发 a 的错误(GH 41670KeyErrorPeriodfreq

  • .loc.__getitem__aUInt64Index和负整数键的错误在某些情况OverflowError下会升高,而KeyError在其他情况下会环绕为正整数(GH 41777

  • 在某些情况下Index.get_indexer()无法使用无效、或参数引发错误(GH 41918ValueErrormethodlimittolerance

  • 当传递无效字符串而不是 a时,对aSeriesDataFramea进行切片时出现错误(GH 41821TimedeltaIndexValueErrorTypeError

  • 构造函数中的错误Index有时会默默地忽略指定的dtypeGH 38879

  • Index.where()行为现在镜像Index.putmask()行为,即匹配(GH 39412index.where(mask, other)index.putmask(~mask, other)

丢失的

多重索引#

  • 当不唯一且未提供时DataFrame.drop()引发 a 的错误( GH 36293TypeErrorMultiIndexlevel

  • 结果MultiIndex.intersection()重复时出现错误( GH 38623NaN

  • 即使它们的顺序不同,错误也会MultiIndex.equals()错误地返回(GH 38439TrueMultiIndexNaN

  • 与( GH 38653 )MultiIndex.intersection()相交时总是返回空结果的错误CategoricalIndex

  • 当索引包含不可排序条目时MultiIndex.difference()错误引发的错误( GH 41915TypeError

  • 当用于空并且仅索引特定级别时MultiIndex.reindex()引发 a 的错误( GH 41170ValueErrorMultiIndex

  • 针对平盘重新索引时MultiIndex.reindex()加注错误( GH 41707 )TypeErrorIndex

输入/输出#

时期

  • Period对象 或IndexSeriesDataFrame与不匹配的比较PeriodDtype现在的行为类似于其他不匹配类型的比较,返回False等于、True不等于以及引发TypeError不等检查(GH 39274

绘图#

  • plotting.scatter_matrix()当 2d 参数通过时引发错误axGH 16253

  • constrained_layout启用Matplotlib 时防止出现警告( GH 25261 )

  • 如果重复调用该函数并且使用了某些调用而其他调用没有使用,则错误DataFrame.plot()会在图例中显示错误的颜色( GH 39522yerr

  • 如果重复调用该函数并且使用某些调用而其他调用使用(GH 40044),则错误DataFrame.plot()会在图例中显示错误的颜色secondary_ylegend=False

  • DataFrame.plot.box()选择主题时出现的错误dark_background,绘图的大写字母或最小/最大标记不可见(GH 40769

分组/重新采样/滚动#

重塑#

稀疏#

  • 使用没有 a 的数字列DataFrame.sparse.to_coo()引发 a时出现错误(GH 18414KeyErrorIndex0

  • 从整数数据类型转换为浮点数据类型时产生错误结果的SparseArray.astype()错误(GH 34456copy=False

  • 错误SparseArray.max()并且SparseArray.min()总是返回空结果(GH 40921

扩展数组#

造型器#

其他

贡献者#

共有 251 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。

  • 阿布舍克 R +

  • 艾达·德拉金达

  • 亚当·斯图尔特

  • 亚当·特纳 +

  • 艾丹·费尔德曼 +

  • 阿吉特什·辛格 +

  • 阿克沙特·贾恩 +

  • 阿尔伯特·维拉诺瓦·德尔·莫拉尔

  • 亚历山大·普林斯·莱维塞尔 +

  • 安德鲁·哈维尔克 +

  • 安德鲁·维特斯卡

  • 安格丽娜·班布拉 +

  • 安库什·杜阿 +

  • 安娜·达格利斯

  • 阿什兰·帕克 +

  • 阿什瓦尼 +

  • 阿维纳什·潘查姆

  • 阿尤斯曼·库马尔 +

  • 豆南

  • 伯努瓦·维诺

  • 巴拉特·拉古纳坦

  • 比杰·雷格米 +

  • 波宾·马修 +

  • 博格丹·皮利亚维茨 +

  • 布莱恩·休莱特 +

  • 孙布莱恩+

  • 布洛克+

  • 布莱恩·卡特勒

  • 迦勒+

  • 何志坚 +

  • 查图拉·维达纳奇 +

  • 钦梅·雷恩 +

  • 克里斯·林奇

  • 克里斯·威瑟斯

  • 克里斯托·彼得罗普洛斯

  • 科朗坦·吉拉德 +

  • DaPy15 +

  • 达摩达拉普杜 +

  • 丹尼尔·赫里斯卡

  • 丹尼尔·萨克斯顿

  • 丹尼尔·费文斯

  • 敢于阿德乌米 +

  • 戴夫·威尔默

  • 大卫·施拉赫特 +

  • 大卫-dmh +

  • 迪邦拉瓦尔 +

  • 多丽丝·李 +

  • Jan-Philip Gehrcke 博士 +

  • 干燥S+

  • 迪伦·珀西

  • 埃尔凡·纳里曼

  • 梁家伟

  • 埃里克·李尔 +

  • 前夕

  • 李芳辰

  • 菲利克斯·迪沃

  • 弗洛里安·杰特

  • 弗雷德·赖斯

  • GFJ138+

  • 高拉夫·谢尼 +

  • 杰弗里·B·艾森巴斯 +

  • 格萨·斯图佩里奇 +

  • 格里芬·安塞尔 +

  • 古斯塔沃·C·马西尔 +

  • 海蒂+

  • 亨利+

  • 吴鸿义 +

  • 伊恩·奥兹瓦尔德 +

  • 欧夫·勒斯蒂格

  • 艾萨克·钟 +

  • 艾萨克·维尔舒普

  • JHM 达比郡 (MBP) +

  • JHM Darbyshire (iMac) +

  • 刘杰克+

  • 詹姆斯·兰姆 +

  • 杰特·帕雷克

  • 杰夫·雷巴克

  • 杰正2018 +

  • 乔迪·克莱马克

  • 约翰·卡尔斯特罗姆 +

  • 约翰·麦奎根

  • 乔里斯·范登博什

  • 何塞

  • 何塞海军

  • 乔什·迪马斯基

  • 乔什·弗里德兰德

  • 约书亚·克莱因 +

  • 朱莉娅·西格内尔

  • 朱利安·施尼茨勒 +

  • 董凯琪

  • 卡西姆·潘吉里 +

  • 凯蒂·史密斯 +

  • 凯莉+

  • 凯尼尔+

  • 开普勒,凯尔 +

  • 凯文·谢泼德

  • 许清威 +

  • 凯莉·休伊特 +

  • 拉里·黄 +

  • 光年+

  • 卢卡斯·霍尔茨 +

  • 卢卡斯·罗德斯·吉拉奥

  • 幸运的西瓦古鲁纳坦 +

  • 路易斯·平托

  • 马切伊·科斯 +

  • 马克·加西亚

  • 马可·爱德华·戈雷利 +

  • 马可·戈雷利

  • 马可·戈雷利 +

  • 马克·格雷厄姆

  • 马丁·登格勒 +

  • 马丁·格里戈洛夫 +

  • 马蒂·鲁道夫 +

  • 马特·罗斯克

  • 马修·罗斯克

  • 马修·泽特林

  • 马克斯·博林布鲁克

  • 马克西姆·伊万诺夫

  • 马克西姆·库普弗 +

  • 马尤尔+

  • 米塞克斯机器

  • 米凯尔·贾尼亚克

  • 谢家明 +

  • 米歇尔·德鲁伊特 +

  • 迈克·罗伯茨 +

  • 米罗斯拉夫·塞迪维

  • 穆罕默德·贾法尔·马什哈迪

  • 莫里萨·曼泽拉 +

  • 莫尔塔达·梅哈尔

  • 穆克坦+

  • 纳文·阿格拉沃尔 +

  • 诺亚

  • 诺法尔·米斯拉基 +

  • 奥莱·科齐涅茨

  • 奥尔加·马图拉 +

  • 奥利+

  • 奥马尔·阿菲菲

  • 奥马尔·奥扎斯兰 +

  • 欧文·拉蒙特 +

  • 奥赞·厄赫雷登 +

  • 熊猫开发团队

  • 保罗·拉门斯

  • 冻糕 Gasana +

  • 帕特里克·赫夫勒

  • 保罗·麦卡锡 +

  • 保罗·科斯塔 +

  • 帕夫A

  • 彼得

  • 普拉杜姆纳·拉胡尔 +

  • 普尼特瓦拉 +

  • 侯QP +

  • 拉胡尔·乔汉

  • 拉胡尔·萨塔那帕利

  • 理查德·沙德拉克

  • 罗伯特·布拉德肖

  • 罗宾对罗克塞尔

  • 罗希特·古普塔

  • 萨姆·普尔基斯 +

  • 塞缪尔·吉法德 +

  • 肖恩·M·劳 +

  • 沙哈尔·纳维 +

  • 沙哈尔·纳维 +

  • 希夫·古普塔 +

  • 施瑞·迪克西特 +

  • 杨树东 +

  • 西蒙·伯姆 +

  • 西蒙·霍金斯

  • 西尼德·贝克 +

  • 斯特凡·梅杰尔加德 +

  • 史蒂文·皮特曼 +

  • 史蒂文·谢勒 +

  • 史蒂芬·吉尤 +

  • 劳夫+

  • 泰加·D·普拉塔玛 +

  • 特尔吉·彼得森

  • 西奥多罗斯·尼古拉乌 +

  • 托马斯·迪克森

  • 托马斯·李

  • 托马斯·史密斯

  • 于托马斯+

  • 托马斯·布莱斯QC +

  • 蒂姆·霍夫曼

  • 汤姆·奥格斯普格

  • 托斯顿·沃特温

  • 泰勒·雷迪

  • 尤里尔·玛德

  • 乌韦·科恩

  • 文纳图鲁姆 +

  • 维罗莎李

  • 弗拉基米尔·波多尔斯基

  • 维姆·帕塔克 +

  • 王爱勇

  • 瓦尔特里·科斯基宁 +

  • 司文俊+

  • 威廉·艾德

  • 耶斯万斯 N +

  • 耿元浩

  • 齐托·雷洛娃 +

  • 阿夫拉02 +

  • 逮捕+

  • 攻击68

  • cdknox +

  • 青格+

  • 探寻者+

  • 弗特里哈乔 +

  • github-actions[机器人] +

  • 贡贾-索兰基 +

  • 古鲁基兰

  • 哈桑亚曼

  • 我-秋-y +

  • 杰布罗克门德尔

  • 杰姆霍尔泽 +

  • 乔迪·克雷斯波 +

  • 乔塔西 +

  • 杰雷巴克

  • 朱利安斯米德克 +

  • 凯勒克普勒

  • 雷皮通+

  • 卢卡斯罗德斯

  • 玛罗斯96 +

  • 米克罗因 +

  • 姆隆斯基恩

  • 莫因克+

  • 莫尔梅

  • 姆施莫克勒 +

  • 姆泽特林11

  • 钠2+

  • 诺法米什拉基 +

  • 帕尔捷夫

  • 帕特里克

  • p型

  • 真实领先

  • 拉什德拉赫

  • 鲁克维 +

  • 玫瑰金+

  • 索科德+

  • 斯德门滕 +

  • 肖恩布朗

  • sstiijn +

  • 斯蒂芬利德 +

  • 苏克里蒂1 +

  • 泰泽豪

  • 欧尔利+

  • 西奥多朱 +

  • 索迪斯特拉+

  • 托尼耶耶 +

  • 青格格 +

  • 图书书+

  • 旺戈拉德 +

  • 弗拉杜+

  • 韦尔塔+