版本 0.9.1(2012 年 11 月 14 日)#

这是 0.9.0 版本的错误修复版本,包含多项新功能和增强功能以​​及大量错误修复。新功能包括 DataFrame 和 Series 的按列排序顺序、改进的排序方法 NA 处理、DataFrame 的屏蔽函数以及 DataFrame 的日内时间序列过滤。

新功能

  • Series.sortDataFrame.sortDataFrame.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 1508GH 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 有新的wheremask方法来根据给定的布尔掩码选择值(GH 2109GH 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_timebetween_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 2124GH 2125GH 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