版本 0.9.1(2012 年 11 月 14 日)# 这是 0.9.0 版本的错误修复版本,包含多项新功能和增强功能以及大量错误修复。新功能包括 DataFrame 和 Series 的按列排序顺序、改进的排序方法 NA 处理、DataFrame 的屏蔽函数以及 DataFrame 的日内时间序列过滤。 新功能# Series.sort、DataFrame.sort、DataFrame.sort_index现在可以以每列的方式指定以支持多种排序顺序(GH 928) In [2]: df = pd.DataFrame(np.random.randint(0, 2, (6, 3)), ...: columns=['A', 'B', 'C']) In [3]: df.sort(['A', 'B'], ascending=[1, 0]) Out[3]: A B C 3 0 1 1 4 0 1 1 2 0 0 1 0 1 0 0 1 1 0 0 5 1 0 0 DataFrame.rank现在支持参数的附加参数值, na_option因此可以为缺失值分配最大或最小等级(GH 1508、GH 2159) In [1]: df = pd.DataFrame(np.random.randn(6, 3), columns=['A', 'B', 'C']) In [2]: df.loc[2:4] = np.nan In [3]: df.rank() Out[3]: A B C 0 3.0 2.0 1.0 1 1.0 3.0 2.0 2 NaN NaN NaN 3 NaN NaN NaN 4 NaN NaN NaN 5 2.0 1.0 3.0 In [4]: df.rank(na_option='top') Out[4]: A B C 0 6.0 5.0 4.0 1 4.0 6.0 5.0 2 2.0 2.0 2.0 3 2.0 2.0 2.0 4 2.0 2.0 2.0 5 5.0 4.0 6.0 In [5]: df.rank(na_option='bottom') Out[5]: A B C 0 3.0 2.0 1.0 1 1.0 3.0 2.0 2 5.0 5.0 5.0 3 5.0 5.0 5.0 4 5.0 5.0 5.0 5 2.0 1.0 3.0 DataFrame 有新的where和mask方法来根据给定的布尔掩码选择值(GH 2109,GH 2151) DataFrame 目前支持通过与 DataFrame 长度相同的布尔向量进行切片(在 内部[])。返回的 DataFrame 具有与原始 DataFrame 相同的列数,但在其索引上进行了切片。 In [6]: df = pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) In [7]: df Out[7]: A B C 0 0.276232 -1.087401 -0.673690 1 0.113648 -1.478427 0.524988 2 0.404705 0.577046 -1.715002 3 -1.039268 -0.370647 -1.157892 4 -1.344312 0.844885 1.075770 In [8]: df[df['A'] > 0] Out[8]: A B C 0 0.276232 -1.087401 -0.673690 1 0.113648 -1.478427 0.524988 2 0.404705 0.577046 -1.715002 如果使用基于 DataFrame 的布尔条件(与原始 DataFrame 大小相同)对 DataFrame 进行切片,则返回与原始大小(索引和列)相同的 DataFrame,其中不满足布尔条件的元素为NaN。这是通过新方法完成的DataFrame.where。此外,还where需要一个可选other参数进行替换。 In [9]: df[df > 0] Out[9]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 In [10]: df.where(df > 0) Out[10]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 In [11]: df.where(df > 0, -df) Out[11]: A B C 0 0.276232 1.087401 0.673690 1 0.113648 1.478427 0.524988 2 0.404705 0.577046 1.715002 3 1.039268 0.370647 1.157892 4 1.344312 0.844885 1.075770 此外,where现在对齐输入布尔条件(ndarray 或 DataFrame),以便可以通过设置进行部分选择。这类似于通过部分设置.ix(但在内容而不是轴标签上) In [12]: df2 = df.copy() In [13]: df2[df2[1:4] > 0] = 3 In [14]: df2 Out[14]: A B C 0 0.276232 -1.087401 -0.673690 1 3.000000 -1.478427 3.000000 2 3.000000 3.000000 -1.715002 3 -1.039268 -0.370647 -1.157892 4 -1.344312 0.844885 1.075770 DataFrame.mask是 的逆布尔运算where。 In [15]: df.mask(df <= 0) Out[15]: A B C 0 0.276232 NaN NaN 1 0.113648 NaN 0.524988 2 0.404705 0.577046 NaN 3 NaN NaN NaN 4 NaN 0.844885 1.075770 启用通过列名称引用 Excel 列(GH 1936) In [1]: xl = pd.ExcelFile('data/test.xls') In [2]: xl.parse('Sheet1', index_col=0, parse_dates=True, parse_cols='A:D') series.plot(x_compat=True)添加了使用or ( GH 2205 )禁用 pandas 风格的刻度定位器和格式化程序的选项pandas.plot_params['x_compat'] = True 现有的 TimeSeries 方法at_time并between_time已添加到 DataFrame ( GH 2149 ) DataFrame.dot 现在可以接受 ndarrays ( GH 2042 ) DataFrame.drop 现在支持非唯一索引(GH 2101) Panel.shift 现在支持负周期(GH 2164) DataFrame 现在支持一元 ~ 运算符 ( GH 2110 ) API 更改# 使用PeriodIndex对数据进行上采样将产生跨越原始时间窗口的更高频率的TimeSeries In [1]: prng = pd.period_range('2012Q1', periods=2, freq='Q') In [2]: s = pd.Series(np.random.randn(len(prng)), prng) In [4]: s.resample('M') Out[4]: 2012-01 -1.471992 2012-02 NaN 2012-03 NaN 2012-04 -0.493593 2012-05 NaN 2012-06 NaN Freq: M, dtype: float64 period.end_time 现在返回时间间隔中的最后一个纳秒(GH 2124、GH 2125、GH 1764) In [16]: p = pd.Period('2012') In [17]: p.end_time Out[17]: Timestamp('2012-12-31 23:59:59.999999999') 对于指定了自定义转换器的列,文件解析器不再强制为 float 或 bool ( GH 2184 ) In [18]: import io In [19]: data = ('A,B,C\n' ....: '00001,001,5\n' ....: '00002,002,6') ....: In [20]: pd.read_csv(io.StringIO(data), converters={'A': lambda x: x.strip()}) Out[20]: A B C 0 00001 1 5 1 00002 2 6 请参阅GitHub 上的完整发行说明或问题跟踪器以获取完整列表。 贡献者# 共有 11 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 布伦达·穆恩 + 常社 杰夫·雷巴克 + 贾斯汀·C·约翰逊 + K.-迈克尔·埃伊 马丁·布莱斯 托拜厄斯·勃兰特 + 韦斯·麦金尼 沃特·奥弗迈尔 蒂米 yp