0.22.0版(2017年12月29日)#
这是从0.21.1开始的一个主要版本,包括一个与API冲突的单一更改。我们建议所有用户在仔细阅读发行说明(单数!)后升级到此版本。
向后不兼容的API更改#
Pandas0.22.0改变了对空和所有的处理- NA 和和乘积。概括地说,
空的或全部的总和- NA
Series
现在是0
空的或全部的产品- NA
Series
现在是1
我们已经添加了一个
min_count
参数设置为.sum()
和.prod()
控制使结果有效的最小有效值数量。如果少于min_count
非- NA 值存在,则结果为 NA 。默认为0
。归来NaN
,0.21行为,使用min_count=1
。
一些背景资料:在Pandas0.21中,我们修复了All的返回值长期不一致的问题- NA 系列取决于是否安装了瓶颈。看见 全NaN或空系列/数据帧的总和/生产现在是一致的NaN 。同时,我们更改了空格的总和和Prod Series
也是 NaN
。
根据反馈,我们已经部分恢复了这些更改。
算术运算#
EMPTY或ALL的默认和- NA Series
现在是 0
。
Pandas0.21.x
In [1]: pd.Series([]).sum()
Out[1]: nan
In [2]: pd.Series([np.nan]).sum()
Out[2]: nan
Pandas0.22.0
In [1]: pd.Series([]).sum()
Out[1]: 0.0
In [2]: pd.Series([np.nan]).sum()
Out[2]: 0.0
默认行为与安装了瓶颈的Pandas0.20.3相同。它也与NumPy的行为相匹配 np.nansum
在空虚和所有的- NA 数组。
使空数列的和返回 NaN
(无瓶颈的Pandas0.20.3或Pandas0.21.x的默认行为),使用 min_count
关键字。
In [3]: pd.Series([]).sum(min_count=1)
Out[3]: nan
多亏了 skipna
参数,则 .sum
对所有人来说- NA 系列在概念上与 .sum
一座空荡荡的房子 skipna=True
(默认设置)。
In [4]: pd.Series([np.nan]).sum(min_count=1) # skipna=True by default
Out[4]: nan
这个 min_count
参数引用的最小数量 non-null 非NA总和或乘积所需的值。
Series.prod()
已更新为行为与 Series.sum()
,返回 1
取而代之的是。
In [5]: pd.Series([]).prod()
Out[5]: 1.0
In [6]: pd.Series([np.nan]).prod()
Out[6]: 1.0
In [7]: pd.Series([]).prod(min_count=1)
Out[7]: nan
这些变化会影响 DataFrame.sum()
和 DataFrame.prod()
也是。最后,Pandas身上一些不太明显的地方会受到这一变化的影响。
按类别进行分组#
按对象分组 Categorical
现在,求和又回来了 0
而不是 NaN
对于没有观察到的类别。产品现在返回 1
而不是 NaN
。
Pandas0.21.x
In [8]: grouper = pd.Categorical(['a', 'a'], categories=['a', 'b'])
In [9]: pd.Series([1, 2]).groupby(grouper).sum()
Out[9]:
a 3.0
b NaN
dtype: float64
Pandas0.22
In [8]: grouper = pd.Categorical(["a", "a"], categories=["a", "b"])
In [9]: pd.Series([1, 2]).groupby(grouper).sum()
Out[9]:
a 3
b 0
Length: 2, dtype: int64
要恢复0.21的回归行为 NaN
对于未观察到的组,请使用 min_count>=1
。
In [10]: pd.Series([1, 2]).groupby(grouper).sum(min_count=1)
Out[10]:
a 3.0
b NaN
Length: 2, dtype: float64
重采样#
所有的总和和乘积- NA 垃圾箱已从 NaN
至 0
对于总和和 1
对于产品。
Pandas0.21.x
In [11]: s = pd.Series([1, 1, np.nan, np.nan],
....: index=pd.date_range('2017', periods=4))
....: s
Out[11]:
2017-01-01 1.0
2017-01-02 1.0
2017-01-03 NaN
2017-01-04 NaN
Freq: D, dtype: float64
In [12]: s.resample('2d').sum()
Out[12]:
2017-01-01 2.0
2017-01-03 NaN
Freq: 2D, dtype: float64
Pandas0.22.0
In [11]: s = pd.Series([1, 1, np.nan, np.nan], index=pd.date_range("2017", periods=4))
In [12]: s.resample("2d").sum()
Out[12]:
2017-01-01 2.0
2017-01-03 0.0
Freq: 2D, Length: 2, dtype: float64
要恢复0.21的回归行为 NaN
,使用 min_count>=1
。
In [13]: s.resample("2d").sum(min_count=1)
Out[13]:
2017-01-01 2.0
2017-01-03 NaN
Freq: 2D, Length: 2, dtype: float64
特别是,上采样和取和或乘积会受到影响,因为上采样会导致缺失值,即使原始序列是完全有效的。
Pandas0.21.x
In [14]: idx = pd.DatetimeIndex(['2017-01-01', '2017-01-02'])
In [15]: pd.Series([1, 2], index=idx).resample('12H').sum()
Out[15]:
2017-01-01 00:00:00 1.0
2017-01-01 12:00:00 NaN
2017-01-02 00:00:00 2.0
Freq: 12H, dtype: float64
Pandas0.22.0
In [14]: idx = pd.DatetimeIndex(["2017-01-01", "2017-01-02"])
In [15]: pd.Series([1, 2], index=idx).resample("12H").sum()
Out[15]:
2017-01-01 00:00:00 1
2017-01-01 12:00:00 0
2017-01-02 00:00:00 2
Freq: 12H, Length: 3, dtype: int64
再一次, min_count
关键字可用于恢复0.21行为。
In [16]: pd.Series([1, 2], index=idx).resample("12H").sum(min_count=1)
Out[16]:
2017-01-01 00:00:00 1.0
2017-01-01 12:00:00 NaN
2017-01-02 00:00:00 2.0
Freq: 12H, Length: 3, dtype: float64
滚压扩径#
滚动和扩展已经有了一个 min_periods
行为类似于的关键字 min_count
。唯一不同的情况是,当使用 min_periods=0
。以前,这是返回的 NaN
,当少于 min_periods
非- NA 价值就在窗口里。现在它又回来了 0
。
Pandas0.21.1
In [17]: s = pd.Series([np.nan, np.nan])
In [18]: s.rolling(2, min_periods=0).sum()
Out[18]:
0 NaN
1 NaN
dtype: float64
Pandas0.22.0
In [17]: s = pd.Series([np.nan, np.nan])
In [18]: s.rolling(2, min_periods=0).sum()
Out[18]:
0 0.0
1 0.0
Length: 2, dtype: float64
的默认行为 min_periods=None
,暗示着 min_periods
等于窗口大小,则保持不变。
兼容性#
如果您维护的库应该可以跨Pandas版本工作,那么将Pandas0.21排除在您的需求之外可能是最容易的。否则,你所有的 sum()
调用将需要检查是否 Series
在求和之前为空。
使用设置工具,在您的 setup.py
使用::
install_requires=['pandas!=0.21.*', ...]
对于conda,使用
requirements:
run:
- pandas !=0.21.0,!=0.21.1
请注意,所有-的返回值不一致- NA 对于Pandas0.20.3和更早的版本,系列仍然存在。避开Pandas0.21只会对空箱子有所帮助。
贡献者#
共有1人为此次发布贡献了补丁。名字中带有“+”的人第一次贡献了一个补丁。
Tom Augspurger