版本 0.13.0(2014 年 1 月 3 日)#

这是 0.12.0 的主要版本,包括许多 API 更改、一些新功能和增强功能以​​及大量错误修复。

亮点包括:

  • 支持新的索引类型Float64Index和其他索引增强功能

  • HDFStore具有用于查询规范的新的基于字符串的语法

  • 支持新的插值方法

  • 更新timedelta操作

  • 一种新的字符串操作方法extract

  • 对偏移量的纳秒支持

  • isin对于数据框

添加了一些实验性功能,包括:

  • eval/query表达评估的新方法

  • 支持msgpack序列化

  • 与 Google 的 I/O 接口BigQuery

它们是几个新的或更新的文档部分,包括:

警告

在 0.13.0 中Series,内部已被重构为不再是 subclassndarray 而是 subclass NDFrame,类似于 pandas 容器的其余部分。这应该是一个透明的更改,仅对 API 产生非常有限的影响。请参阅内部重构

API 更改#

  • read_excel现在在其参数中支持整数sheetname,给出要读入的工作表的索引(GH 4301)。

  • 文本解析器现在将任何类似 inf 的内容(“inf”、“Inf”、“-Inf”、“iNf”等)视为无穷大。 (GH 4220GH 4219),影响 read_tableread_csv等。

  • pandas感谢 @jtratner,现在 Python 2/3 兼容,无需 2to3。因此,pandas 现在更广泛地使用迭代器。这也导致将 Benjamin Petersonsix图书馆的实质性部分引入 compat。 (GH 4384GH 4375GH 4372

  • pandas.util.compatpandas.util.py3compat已合并到 pandas.compat.pandas.compat现在包含许多允许 2/3 兼容性的功能。它包含范围、过滤器、映射和 zip 的列表和迭代器版本,以及 Python 3 兼容性的其他必要元素。lmaplziplrange以及lfilter所有生成列表而不是迭代器,以与numpy、 下标和pandas构造函数兼容。(GH 4384GH 4375GH 4372

  • Series.get[]使用负索引器现在返回与(GH 4390)相同

  • Index对元数据处理方式和处理方式的更改MultiIndexlevels、、 labelsnames)(GH 4039):

    # previously, you would have set levels or labels directly
    >>> pd.index.levels = [[1, 2, 3, 4], [1, 2, 4, 4]]
    
    # now, you use the set_levels or set_labels methods
    >>> index = pd.index.set_levels([[1, 2, 3, 4], [1, 2, 4, 4]])
    
    # similarly, for names, you can rename the object
    # but setting names is not deprecated
    >>> index = pd.index.set_names(["bob", "cranberry"])
    
    # and all methods take an inplace kwarg - but return None
    >>> pd.index.set_names(["bob", "cranberry"], inplace=True)
    
  • 现在,所有NDFrame与对象的划分都是truedivision,无论未来导入如何。这意味着对 pandas 对象的操作将默认使用浮点除法,并返回浮点数据类型。您可以使用//andfloordiv进行整数除法。

    整数除法

    In [3]: arr = np.array([1, 2, 3, 4])
    
    In [4]: arr2 = np.array([5, 3, 2, 1])
    
    In [5]: arr / arr2
    Out[5]: array([0, 0, 1, 4])
    
    In [6]: pd.Series(arr) // pd.Series(arr2)
    Out[6]:
    0    0
    1    0
    2    1
    3    4
    dtype: int64
    

    真除法

    In [7]: pd.Series(arr) / pd.Series(arr2)  # no future import required
    Out[7]:
    0    0.200000
    1    0.666667
    2    1.500000
    3    4.000000
    dtype: float64
    
  • 推断和向下转换 dtype ifdowncast='infer'传递给fillna/ffill/bfill( GH 4604 )

  • __nonzero__对于所有 NDFrame 对象,现在将引发 a ValueError,这将恢复到(GH 1073GH 4633)行为。请参阅陷阱以获得更详细的讨论。

    这可以防止对整个pandas 对象进行布尔比较,这本质上是不明确的。这些都会引发ValueError.

    >>> df = pd.DataFrame({'A': np.random.randn(10),
    ...                    'B': np.random.randn(10),
    ...                    'C': pd.date_range('20130101', periods=10)
    ...                    })
    ...
    >>> if df:
    ...     pass
    ...
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    
    >>> df1 = df
    >>> df2 = df
    >>> df1 and df2
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    
    >>> d = [1, 2, 3]
    >>> s1 = pd.Series(d)
    >>> s2 = pd.Series(d)
    >>> s1 and s2
    Traceback (most recent call last):
        ...
    ValueError: The truth value of a DataFrame is ambiguous.  Use a.empty,
    a.bool(), a.item(), a.any() or a.all().
    

    .bool()向对象添加了该方法NDFrame,以方便评估单元素布尔系列:

    >>> pd.Series([True]).bool()
     True
    >>> pd.Series([False]).bool()
     False
    >>> pd.DataFrame([[True]]).bool()
     True
    >>> pd.DataFrame([[False]]).bool()
     False
    
  • 所有非索引 NDFrame(SeriesDataFramePanelPanel4DSparsePanel等)现在支持整套算术运算符和算术 Flex 方法(add、sub、mul 等)。SparsePanel不支持powmod具有非标量。 (GH 3765

  • Series现在DataFrame有一种mode()按轴/系列计算统计模式的方法。 (GH 5367

  • 如果用户分配给副本,链接分配现在默认会发出警告。这可以用选项更改mode.chained_assignment,允许的选项是raise/warn/None。请参阅文档

    In [1]: dfc = pd.DataFrame({'A': ['aaa', 'bbb', 'ccc'], 'B': [1, 2, 3]})
    
    In [2]: pd.set_option('chained_assignment', 'warn')
    

    如果尝试这样做,将显示以下警告/异常。

    In [3]: dfc.loc[0]['A'] = 1111
    
    Traceback (most recent call last)
       ...
    SettingWithCopyWarning:
       A value is trying to be set on a copy of a slice from a DataFrame.
       Try using .loc[row_index,col_indexer] = value instead
    

    这是正确的赋值方法。

    In [4]: dfc.loc[0, 'A'] = 11
    
    In [5]: dfc
    Out[5]: 
         A  B
    0   11  1
    1  bbb  2
    2  ccc  3
    
  • Panel.reindex具有以下调用签名Panel.reindex(items=None, major_axis=None, minor_axis=None, **kwargs)

    以便与其他NDFrame物体保持一致。有关详细信息,请参阅内部重构。

  • Series.argminSeries.argmax现在别名为Series.idxminSeries.idxmax。这些返回的索引

    分别为最小或最大元素。在 0.13.0 之前,这些将返回最小/最大元素的位置。 (GH 6214

先前版本弃用/更改#

这些更改是在 0.12 或更早版本中宣布的,自 0.13.0 起生效

  • 删除已弃用的FactorGH 3650

  • 删除已弃用的set_printoptions/reset_printoptionsGH 3046

  • 删除已弃用的_verbose_infoGH 3215

  • read_clipboard/to_clipboard/ExcelFile/ExcelWriterpandas.io.parsersGH 3717 )中删除已弃用的内容,这些可用作主 pandas 命名空间中的函数(例如pd.read_clipboard

  • tupleize_cols现在和的默认值False都是。 0.12 中的公平警告(GH 3604to_csvread_csv

  • 现在的默认值display.max_seq_len是 100 而不是None.这会激活不同位置的长序列的截断显示(“...”)。 (GH 3391

弃用#

0.13.0 中已弃用

  • deprecated iterkv,它将在未来版本中删除(这是用于绕过 的2to3更改的 iteritems 的别名)。 (GH 4384GH 4375GH 4372

  • 已弃用 string 方法match,其作用现在由 更惯用地执行extract。在将来的版本中, 的默认行为match将更改为类似于contains,它返回一个布尔索引器。 (它们的区别在于严格性:match依赖re.matchcontains依赖re.search。)在此版本中,已弃用的行为是默认行为,但新行为可通过关键字参数使用as_indexer=True

索引 API 更改#

在 0.13 之前,无法使用标签索引器 ( .loc/.ix) 来设置未包含在特定轴索引中的值。 (GH 2578)。请参阅文档

在这种Series情况下,这实际上是一个附加操作

In [6]: s = pd.Series([1, 2, 3])

In [7]: s
Out[7]: 
0    1
1    2
2    3
dtype: int64

In [8]: s[5] = 5.

In [9]: s
Out[9]: 
0    1.0
1    2.0
2    3.0
5    5.0
dtype: float64
In [10]: dfi = pd.DataFrame(np.arange(6).reshape(3, 2),
   ....:                    columns=['A', 'B'])
   ....: 

In [11]: dfi
Out[11]: 
   A  B
0  0  1
1  2  3
2  4  5

这将以前KeyError

In [12]: dfi.loc[:, 'C'] = dfi.loc[:, 'A']

In [13]: dfi
Out[13]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4

这就像一个append手术。

In [14]: dfi.loc[3] = 5

In [15]: dfi
Out[15]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
3  5  5  5

任意轴上的面板设置操作将输入对准面板

In [20]: p = pd.Panel(np.arange(16).reshape(2, 4, 2),
   ....:              items=['Item1', 'Item2'],
   ....:              major_axis=pd.date_range('2001/1/12', periods=4),
   ....:              minor_axis=['A', 'B'], dtype='float64')
   ....:

In [21]: p
Out[21]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 2 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 2001-01-12 00:00:00 to 2001-01-15 00:00:00
Minor_axis axis: A to B

In [22]: p.loc[:, :, 'C'] = pd.Series([30, 32], index=p.items)

In [23]: p
Out[23]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 2001-01-12 00:00:00 to 2001-01-15 00:00:00
Minor_axis axis: A to C

In [24]: p.loc[:, :, 'C']
Out[24]:
            Item1  Item2
2001-01-12   30.0   32.0
2001-01-13   30.0   32.0
2001-01-14   30.0   32.0
2001-01-15   30.0   32.0

Float64Index API 更改#

  • 添加了新的索引类型Float64Index.在创建索引时传递浮点值时将自动创建该值。这实现了纯粹的基于标签的切片范例,使得[],ix,loc标量索引和切片工作完全相同。 (GH 263

    默认情况下,构造是针对浮点类型值的。

    In [16]: index = pd.Index([1.5, 2, 3, 4.5, 5])
    
    In [17]: index
    Out[17]: Index([1.5, 2.0, 3.0, 4.5, 5.0], dtype='float64')
    
    In [18]: s = pd.Series(range(5), index=index)
    
    In [19]: s
    Out[19]: 
    1.5    0
    2.0    1
    3.0    2
    4.5    3
    5.0    4
    dtype: int64
    

    的标量选择[],.ix,.loc将始终基于标签。整数将匹配相等的浮点索引(例如3相当于3.0

    In [20]: s[3]
    Out[20]: 2
    
    In [21]: s.loc[3]
    Out[21]: 2
    

    唯一的位置索引是通过iloc

    In [22]: s.iloc[3]
    Out[22]: 3
    

    未找到的标量索引将升高KeyError

    切片始终基于索引的值,对于[],ix,loc且始终基于位置iloc

    In [23]: s[2:4]
    Out[23]: 
    2.0    1
    3.0    2
    dtype: int64
    
    In [24]: s.loc[2:4]
    Out[24]: 
    2.0    1
    3.0    2
    dtype: int64
    
    In [25]: s.iloc[2:4]
    Out[25]: 
    3.0    2
    4.5    3
    dtype: int64
    

    在浮点索引中,允许使用浮点进行切片

    In [26]: s[2.1:4.6]
    Out[26]: 
    3.0    2
    4.5    3
    dtype: int64
    
    In [27]: s.loc[2.1:4.6]
    Out[27]: 
    3.0    2
    4.5    3
    dtype: int64
    
  • 保留其他索引类型上的索引(以及 的位置回退[],ix),但非索引上的浮点切片Float64Index现在将引发TypeError.

    In [1]: pd.Series(range(5))[3.5]
    TypeError: the label [3.5] is not a proper indexer for this index type (Int64Index)
    
    In [1]: pd.Series(range(5))[3.5:4.5]
    TypeError: the slice start [3.5] is not a proper indexer for this index type (Int64Index)
    

    使用标量浮点索引器将在未来版本中被弃用,但目前是允许的。

    In [3]: pd.Series(range(5))[3.0]
    Out[3]: 3
    

HDFStore API 更改#

  • 查询格式更改。现在支持更加类似于字符串的查询格式。请参阅文档

    In [28]: path = 'test.h5'
    
    In [29]: dfq = pd.DataFrame(np.random.randn(10, 4),
       ....:                    columns=list('ABCD'),
       ....:                    index=pd.date_range('20130101', periods=10))
       ....: 
    
    In [30]: dfq.to_hdf(path, key='dfq', format='table', data_columns=True)
    

    使用布尔表达式和内联函数求值。

    In [31]: pd.read_hdf(path, 'dfq',
       ....:             where="index>Timestamp('20130104') & columns=['A', 'B']")
       ....: 
    Out[31]: 
                       A         B
    2013-01-05 -0.424972  0.567020
    2013-01-06 -0.673690  0.113648
    2013-01-07  0.404705  0.577046
    2013-01-08 -0.370647 -1.157892
    2013-01-09  1.075770 -0.109050
    2013-01-10  0.357021 -0.674600
    

    使用内联列引用

    In [32]: pd.read_hdf(path, 'dfq',
       ....:             where="A>0 or C>0")
       ....: 
    Out[32]: 
                       A         B         C         D
    2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
    2013-01-02  1.212112 -0.173215  0.119209 -1.044236
    2013-01-04  0.721555 -0.706771 -1.039575  0.271860
    2013-01-05 -0.424972  0.567020  0.276232 -1.087401
    2013-01-07  0.404705  0.577046 -1.715002 -1.039268
    2013-01-09  1.075770 -0.109050  1.643563 -1.469388
    2013-01-10  0.357021 -0.674600 -1.776904 -0.968914
    
  • 关键字format现在取代了table关键字;允许的值是fixed(f)table(t) 与之前< 0.13.0 相同的默认值,例如put暗示fixed格式和append暗示 table格式。可以通过设置将此默认格式设置为选项io.hdf.default_format

    In [33]: path = 'test.h5'
    
    In [34]: df = pd.DataFrame(np.random.randn(10, 2))
    
    In [35]: df.to_hdf(path, key='df_table', format='table')
    
    In [36]: df.to_hdf(path, key='df_table2', append=True)
    
    In [37]: df.to_hdf(path, key='df_fixed')
    
    In [38]: with pd.HDFStore(path) as store:
       ....:     print(store)
       ....: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
  • 显着的表写入性能改进

  • 处理传入Series的表格式(GH 4330

  • 现在可以序列化timedelta64[ns]表中的数据类型(GH 3577),请参阅文档

  • 添加了一个is_open属性来指示底层文件句柄是否为 is_open;现在,关闭的商店在查看商店时将报告“已关闭”(而不是引发错误)(GH 4409

  • a now 的 closeHDFStore将关闭该实例,但仅当所有打开句柄的HDFStore 引用计数(由 )为 0 时才会关闭实际文件。本质上,您有一个由变量引用的本地实例。一旦您关闭它,它将报告已关闭。其他引用(对同一文件)将继续运行,直到它们本身被关闭。对关闭的文件执行操作将引发 PyTablesHDFStoreClosedFileError

    In [39]: path = 'test.h5'
    
    In [40]: df = pd.DataFrame(np.random.randn(10, 2))
    
    In [41]: store1 = pd.HDFStore(path)
    
    In [42]: store2 = pd.HDFStore(path)
    
    In [43]: store1.append('df', df)
    
    In [44]: store2.append('df2', df)
    
    In [45]: store1
    Out[45]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [46]: store2
    Out[46]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [47]: store1.close()
    
    In [48]: store2
    Out[48]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
    In [49]: store2.close()
    
    In [50]: store2
    Out[50]: 
    <class 'pandas.io.pytables.HDFStore'>
    File path: test.h5
    
  • 删除了该_quiet属性,替换为DuplicateWarningif 从表中检索重复行(GH 4367

  • 从 中删除了该warn参数open。相反,如果您尝试使用OPEN 文件句柄(GH 4367),PossibleDataLossError则会引发异常mode='w'

  • 允许传递的位置数组或掩码作为where条件(GH 4467)。请参阅文档中的示例。

  • 添加关键字dropna=Truetoappend来更改是否不将所有 nan 行写入存储(默认为True,不写入所有 nan 行),也可以通过选项设置io.hdf.dropna_tableGH 4625

  • 传递商店创建参数;可用于支持内存存储

DataFrame repr 更改#

DataFrame现在,一旦表格超过一定大小,HTML 和纯文本表示形式就会显示表格的截断视图,而不是切换到短信息视图( GH 4886GH 5550)。随着小 DataFrame 变大,这使得表示更加一致。

DataFrame 的截断 HTML 表示

要获取信息视图,请致电DataFrame.info()。如果您更喜欢使用信息视图作为大型 DataFrame 的代表,则可以通过运行来设置它 。set_option('display.large_repr', 'info')

增强功能#

  • df.to_clipboard()学习了一个新excel关键字,可让您将 df 数据直接粘贴到 Excel 中(默认启用)。 (GH 5070)。

  • read_html现在饲养 aURLError而不是捕捉并饲养 a ValueError( GH 4303 , GH 4305 )

  • read_clipboard()添加了和的测试to_clipboard()GH 4282

  • 剪贴板功能现在可与 PySide ( GH 4282 )配合使用

  • 当绘图参数包含重叠的颜色和样式参数时添加了更多信息性错误消息(GH 4402

  • to_dict现在records作为可能的输出类型。返回一个列键字典数组。 (GH 4936

  • NaN提交 get_dummies ( GH 4446 )dummy_na

    # previously, nan was erroneously counted as 2 here
    # now it is not counted at all
    In [51]: pd.get_dummies([1, 2, np.nan])
    Out[51]: 
         1.0    2.0
    0   True  False
    1  False   True
    2  False  False
    
    # unless requested
    In [52]: pd.get_dummies([1, 2, np.nan], dummy_na=True)
    Out[52]: 
         1.0    2.0    NaN
    0   True  False  False
    1  False   True  False
    2  False  False   True
    
  • timedelta64[ns]运营。请参阅文档

    警告

    大多数这些操作都需要numpy >= 1.7

    使用新的顶级to_timedelta,您可以将标量或数组从标准 timedelta 格式(由 生成to_csv)转换为 timedelta 类型(np.timedelta64in nanoseconds)。

    In [53]: pd.to_timedelta('1 days 06:05:01.00003')
    Out[53]: Timedelta('1 days 06:05:01.000030')
    
    In [54]: pd.to_timedelta('15.5us')
    Out[54]: Timedelta('0 days 00:00:00.000015500')
    
    In [55]: pd.to_timedelta(['1 days 06:05:01.00003', '15.5us', 'nan'])
    Out[55]: TimedeltaIndex(['1 days 06:05:01.000030', '0 days 00:00:00.000015500', NaT], dtype='timedelta64[ns]', freq=None)
    
    In [56]: pd.to_timedelta(np.arange(5), unit='s')
    Out[56]: 
    TimedeltaIndex(['0 days 00:00:00', '0 days 00:00:01', '0 days 00:00:02',
                    '0 days 00:00:03', '0 days 00:00:04'],
                   dtype='timedelta64[ns]', freq=None)
    
    In [57]: pd.to_timedelta(np.arange(5), unit='d')
    Out[57]: TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq=None)
    

    dtype 的系列timedelta64[ns]现在可以除以另一个 timedelta64[ns]对象,或者 astyped 来生成float64dtyped 系列。这就是变频。请参阅文档以获取文档。

    In [58]: import datetime
    
    In [59]: td = pd.Series(pd.date_range('20130101', periods=4)) - pd.Series(
       ....:     pd.date_range('20121201', periods=4))
       ....: 
    
    In [60]: td[2] += np.timedelta64(datetime.timedelta(minutes=5, seconds=3))
    
    In [61]: td[3] = np.nan
    
    In [62]: td
    Out[62]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3                NaT
    dtype: timedelta64[ns]
    
    # to days
    In [63]: td / np.timedelta64(1, 'D')
    Out[63]:
    0    31.000000
    1    31.000000
    2    31.003507
    3          NaN
    dtype: float64
    
    In [64]: td.astype('timedelta64[D]')
    Out[64]:
    0    31.0
    1    31.0
    2    31.0
    3     NaN
    dtype: float64
    
    # to seconds
    In [65]: td / np.timedelta64(1, 's')
    Out[65]:
    0    2678400.0
    1    2678400.0
    2    2678703.0
    3          NaN
    dtype: float64
    
    In [66]: td.astype('timedelta64[s]')
    Out[66]:
    0    2678400.0
    1    2678400.0
    2    2678703.0
    3          NaN
    dtype: float64
    

    将系列除以或乘以timedelta64[ns]整数或整数系列

    In [63]: td * -1
    Out[63]: 
    0   -31 days +00:00:00
    1   -31 days +00:00:00
    2   -32 days +23:54:57
    3                  NaT
    dtype: timedelta64[ns]
    
    In [64]: td * pd.Series([1, 2, 3, 4])
    Out[64]: 
    0   31 days 00:00:00
    1   62 days 00:00:00
    2   93 days 00:15:09
    3                NaT
    dtype: timedelta64[ns]
    

    绝对DateOffset对象可以等效于timedeltas

    In [65]: from pandas import offsets
    
    In [66]: td + offsets.Minute(5) + offsets.Milli(5)
    Out[66]: 
    0   31 days 00:05:00.005000
    1   31 days 00:05:00.005000
    2   31 days 00:10:03.005000
    3                       NaT
    dtype: timedelta64[ns]
    

    Fillna 现在支持时间增量

    In [67]: td.fillna(pd.Timedelta(0))
    Out[67]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3    0 days 00:00:00
    dtype: timedelta64[ns]
    
    In [68]: td.fillna(datetime.timedelta(days=1, seconds=5))
    Out[68]: 
    0   31 days 00:00:00
    1   31 days 00:00:00
    2   31 days 00:05:03
    3    1 days 00:00:05
    dtype: timedelta64[ns]
    

    您可以对时间增量执行数值缩减操作。

    In [69]: td.mean()
    Out[69]: Timedelta('31 days 00:01:41')
    
    In [70]: td.quantile(.1)
    Out[70]: Timedelta('31 days 00:00:00')
    
  • plot(kind='kde')现在接受可选参数bw_methodind,分别传递给 scipy.stats.gaussian_kde() (对于 scipy >= 0.11.0)来设置带宽,并传递给 gkde.evaluate() 来指定评估的索引。请参阅 scipy 文档。 (GH 4298

  • DataFrame 构造函数现在接受 numpy 屏蔽记录数组 ( GH 3478 )

  • 新的向量化字符串方法extract返回正则表达式匹配更方便。

    In [71]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\\d)')
    Out[71]: 
         0
    0    1
    1    2
    2  NaN
    

    不匹配的元素返回NaN。提取具有多个组的正则表达式会返回一个每组一列的 DataFrame。

    In [72]: pd.Series(['a1', 'b2', 'c3']).str.extract('([ab])(\\d)')
    Out[72]: 
         0    1
    0    a    1
    1    b    2
    2  NaN  NaN
    

    不匹配的元素返回一行NaN.因此,一系列杂乱的字符串可以转换为类似索引的系列或清理过的或更有用的字符串的数据帧,而无需get()访问元组或re.match对象。

    命名组如

    In [73]: pd.Series(['a1', 'b2', 'c3']).str.extract(
       ....:     '(?P<letter>[ab])(?P<digit>\\d)')
       ....: 
    Out[73]: 
      letter digit
    0      a     1
    1      b     2
    2    NaN   NaN
    

    也可以使用可选的基团。

    In [74]: pd.Series(['a1', 'b2', '3']).str.extract(
       ....:      '(?P<letter>[ab])?(?P<digit>\\d)')
       ....: 
    Out[74]: 
      letter digit
    0      a     1
    1      b     2
    2    NaN     3
    
  • read_stata现在接受 Stata 13 格式 ( GH 4291 )

  • read_fwf现在,如果数据使用提供给函数的分隔符 ( GH 4488 )正确分隔和正确对齐列,则从文件的前 100 行推断列规范。

  • 支持纳秒时间作为偏移量

    警告

    这些操作需要numpy >= 1.7

    秒及以下范围内的周期转换经过重新设计并扩展到纳秒。现在可以使用纳秒范围内的周期。

    In [79]: pd.date_range('2013-01-01', periods=5, freq='5N')
    Out[79]:
    DatetimeIndex([          '2013-01-01 00:00:00',
                   '2013-01-01 00:00:00.000000005',
                   '2013-01-01 00:00:00.000000010',
                   '2013-01-01 00:00:00.000000015',
                   '2013-01-01 00:00:00.000000020'],
                  dtype='datetime64[ns]', freq='5N')
    

    或以频率作为偏移

    In [75]: pd.date_range('2013-01-01', periods=5, freq=pd.offsets.Nano(5))
    Out[75]: 
    DatetimeIndex([          '2013-01-01 00:00:00',
                   '2013-01-01 00:00:00.000000005',
                   '2013-01-01 00:00:00.000000010',
                   '2013-01-01 00:00:00.000000015',
                   '2013-01-01 00:00:00.000000020'],
                  dtype='datetime64[ns]', freq='5ns')
    

    时间戳可以在纳秒范围内修改

    In [76]: t = pd.Timestamp('20130101 09:01:02')
    
    In [77]: t + pd.tseries.offsets.Nano(123)
    Out[77]: Timestamp('2013-01-01 09:01:02.000000123')
    
  • isinDataFrames 的一种新方法,可以很好地与布尔索引配合使用。isin我们将 DataFrame 与之进行比较的参数可以是 DataFrame、Series、dict 或值数组。请参阅文档了解更多信息。

    要获取满足任何条件的行:

    In [78]: dfi = pd.DataFrame({'A': [1, 2, 3, 4], 'B': ['a', 'b', 'f', 'n']})
    
    In [79]: dfi
    Out[79]: 
       A  B
    0  1  a
    1  2  b
    2  3  f
    3  4  n
    
    In [80]: other = pd.DataFrame({'A': [1, 3, 3, 7], 'B': ['e', 'f', 'f', 'e']})
    
    In [81]: mask = dfi.isin(other)
    
    In [82]: mask
    Out[82]: 
           A      B
    0   True  False
    1  False  False
    2   True   True
    3  False  False
    
    In [83]: dfi[mask.any(axis=1)]
    Out[83]: 
       A  B
    0  1  a
    2  3  f
    
  • Series现在支持to_frame将其转换为单列 DataFrame 的方法(GH 5164

  • 这里列出的所有 R 数据集http://stat.ethz.ch/R-manual/R-devel/library/datasets/html/00Index.html现在都可以加载到 pandas 对象中

    # note that pandas.rpy was deprecated in v0.16.0
    import pandas.rpy.common as com
    com.load_data('Titanic')
    
  • tz_localize可以根据非本地化数据的结构推断秋季夏令时转换(GH 4230),请参阅文档

  • DatetimeIndex现在在 API 文档中,请参阅文档

  • json_normalize()是一种新方法,允许您从半结构化 JSON 数据创建平面表。请参阅文档GH 1067

  • 添加了对 qtpandas DataFrameModel 和 DataFrameWidget 的 PySide 支持。

  • Python csv 解析器现在支持 usecols ( GH 4335 )

  • 频率获得了几个新的偏移量:

  • DataFrame有一个新interpolate方法,类似于Series(GH 4434GH 1892

    In [84]: df = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8],
       ....:                   'B': [.25, np.nan, np.nan, 4, 12.2, 14.4]})
       ....: 
    
    In [85]: df.interpolate()
    Out[85]: 
         A      B
    0  1.0   0.25
    1  2.1   1.50
    2  3.4   2.75
    3  4.7   4.00
    4  5.6  12.20
    5  6.8  14.40
    

    此外,method参数interpolate已扩展为包括 新方法需要scipy。有关各种方法何时适用的更多信息,请参阅 Scipy 参考指南文档。请参阅文档'nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'barycentric', 'krogh', 'piecewise_polynomial', 'pchip', 'polynomial', 'spline'

    Interpolate 现在还接受limit关键字参数。这与fillna的 limit类似:

    In [86]: ser = pd.Series([1, 3, np.nan, np.nan, np.nan, 11])
    
    In [87]: ser.interpolate(limit=2)
    Out[87]: 
    0     1.0
    1     3.0
    2     5.0
    3     7.0
    4     NaN
    5    11.0
    dtype: float64
    
  • 新增wide_to_long面板数据便捷功能。请参阅文档

    In [88]: np.random.seed(123)
    
    In [89]: df = pd.DataFrame({"A1970" : {0 : "a", 1 : "b", 2 : "c"},
       ....:                    "A1980" : {0 : "d", 1 : "e", 2 : "f"},
       ....:                    "B1970" : {0 : 2.5, 1 : 1.2, 2 : .7},
       ....:                    "B1980" : {0 : 3.2, 1 : 1.3, 2 : .1},
       ....:                    "X"     : dict(zip(range(3), np.random.randn(3)))
       ....:                   })
       ....: 
    
    In [90]: df["id"] = df.index
    
    In [91]: df
    Out[91]: 
      A1970 A1980  B1970  B1980         X  id
    0     a     d    2.5    3.2 -1.085631   0
    1     b     e    1.2    1.3  0.997345   1
    2     c     f    0.7    0.1  0.282978   2
    
    In [92]: pd.wide_to_long(df, ["A", "B"], i="id", j="year")
    Out[92]: 
                    X  A    B
    id year                  
    0  1970 -1.085631  a  2.5
    1  1970  0.997345  b  1.2
    2  1970  0.282978  c  0.7
    0  1980 -1.085631  d  3.2
    1  1980  0.997345  e  1.3
    2  1980  0.282978  f  0.1
    
  • to_csv现在采用一个date_format关键字参数来指定输出日期时间对象的格式。索引、列和值中遇到的日期时间都将应用此格式。 (GH 4313

  • DataFrame.plot将通过传递kind='scatter'( GH 2215 )来散布 x 与 y 的关系图

  • 添加了对 Google Analytics v3 API 分段 ID 的支持,该 ID 也支持 v2 ID。 (GH 5271

实验#

  • 新函数在幕后eval()实现表达式评估 。numexpr这会导致涉及大型数据帧/系列的复杂表达式大幅加速。例如,

    In [93]: nrows, ncols = 20000, 100
    
    In [94]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols))
       ....:                       for _ in range(4)]
       ....: 
    
    # eval with NumExpr backend
    In [95]: %timeit pd.eval('df1 + df2 + df3 + df4')
    2.82 ms +- 67.4 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
    
    # pure Python evaluation
    In [96]: %timeit df1 + df2 + df3 + df4
    2.89 ms +- 56.9 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
    

    有关更多详细信息,请参阅文档

  • 与 类似pandas.evalDataFrame有一个新 DataFrame.eval方法可以在 的上下文中计算表达式DataFrame。例如,

    In [97]: df = pd.DataFrame(np.random.randn(10, 2), columns=['a', 'b'])
    
    In [98]: df.eval('a + b')
    Out[98]: 
    0   -0.685204
    1    1.589745
    2    0.325441
    3   -1.784153
    4   -0.432893
    5    0.171850
    6    1.895919
    7    3.065587
    8   -0.092759
    9    1.391365
    dtype: float64
    
  • query()添加了方法,允许您DataFrame使用与 Python 语法几乎相同的自然查询语法来选择 a 的元素。例如,

    In [99]: n = 20
    
    In [100]: df = pd.DataFrame(np.random.randint(n, size=(n, 3)), columns=['a', 'b', 'c'])
    
    In [101]: df.query('a < b < c')
    Out[101]: 
        a   b   c
    11  1   5   8
    15  8  16  19
    

    df选择where计算结果为 的所有行。有关更多详细信息,请参阅文档a < b < cTrue

  • pd.read_msgpack()现在pd.to_msgpack()是一种支持的以轻量级便携式二进制格式序列化任意 pandas(和 python 对象)的方法。请参阅文档

    警告

    由于这是一个实验库,因此存储格式在未来版本之前可能不稳定。

    df = pd.DataFrame(np.random.rand(5, 2), columns=list('AB'))
    df.to_msgpack('foo.msg')
    pd.read_msgpack('foo.msg')
    
    s = pd.Series(np.random.rand(5), index=pd.date_range('20130101', periods=5))
    pd.to_msgpack('foo.msg', df, s)
    pd.read_msgpack('foo.msg')
    

    您可以将iterator=True解压结果传递给迭代器

    for o in pd.read_msgpack('foo.msg', iterator=True):
        print(o)
    
  • pandas.io.gbq提供了一种通过 pandas DataFrames 从 Google BigQuery 数据集中提取数据并将数据加载到其中的简单方法。 BigQuery 是一种类似于 SQL 的高性能数据库服务,可用于针对极大的数据集执行即席查询。请参阅文档

    from pandas.io import gbq
    
    # A query to select the average monthly temperatures in the
    # in the year 2000 across the USA. The dataset,
    # publicata:samples.gsod, is available on all BigQuery accounts,
    # and is based on NOAA gsod data.
    
    query = """SELECT station_number as STATION,
    month as MONTH, AVG(mean_temp) as MEAN_TEMP
    FROM publicdata:samples.gsod
    WHERE YEAR = 2000
    GROUP BY STATION, MONTH
    ORDER BY STATION, MONTH ASC"""
    
    # Fetch the result set for this query
    
    # Your Google BigQuery Project ID
    # To find this, see your dashboard:
    # https://console.developers.google.com/iam-admin/projects?authuser=0
    projectid = 'xxxxxxxxx'
    df = gbq.read_gbq(query, project_id=projectid)
    
    # Use pandas to process and reshape the dataset
    
    df2 = df.pivot(index='STATION', columns='MONTH', values='MEAN_TEMP')
    df3 = pd.concat([df2.min(), df2.mean(), df2.max()],
                    axis=1, keys=["Min Tem", "Mean Temp", "Max Temp"])
    

    生成的数据帧是:

    > df3
                Min Tem  Mean Temp    Max Temp
     MONTH
     1     -53.336667  39.827892   89.770968
     2     -49.837500  43.685219   93.437932
     3     -77.926087  48.708355   96.099998
     4     -82.892858  55.070087   97.317240
     5     -92.378261  61.428117  102.042856
     6     -77.703334  65.858888  102.900000
     7     -87.821428  68.169663  106.510714
     8     -89.431999  68.614215  105.500000
     9     -86.611112  63.436935  107.142856
     10    -78.209677  56.880838   92.103333
     11    -50.125000  48.861228   94.996428
     12    -50.332258  42.286879   94.396774
    

    警告

    要使用此模块,您需要一个 BigQuery 帐户。有关详细信息,请参阅 < https://cloud.google.com/products/big-query >。

    截至 2013 年 10 月 10 日,Google 的 API 中存在一个错误,导致结果集无法大于 100,000 行。补丁计划于 2013 年 10 月 14 日这一周发布。

内部重构#

在 0.13.0 中,有一个主要的重构,主要是对Seriesfrom 进行子类化,它是和NDFrame的当前基类,以统一方法和行为。系列以前直接从 . (GH 4080GH 3862GH 816DataFramePanelndarray

警告

< 0.13.0 存在两个潜在的不兼容性

  • Series如果将 aSeries 作为参数传递,则使用某些 numpy 函数之前会返回 a 。这似乎只影响np.ones_likenp.empty_likenp.diffnp.where现在这些都回来了ndarrays

    In [102]: s = pd.Series([1, 2, 3, 4])
    

    Numpy 用法

    In [103]: np.ones_like(s)
    Out[103]: array([1, 1, 1, 1])
    
    In [104]: np.diff(s)
    Out[104]: array([1, 1, 1])
    
    In [105]: np.where(s > 1, s, np.nan)
    Out[105]: array([nan,  2.,  3.,  4.])
    

    潘多尼克用法

    In [106]: pd.Series(1, index=s.index)
    Out[106]: 
    0    1
    1    1
    2    1
    3    1
    dtype: int64
    
    In [107]: s.diff()
    Out[107]: 
    0    NaN
    1    1.0
    2    1.0
    3    1.0
    dtype: float64
    
    In [108]: s.where(s > 1)
    Out[108]: 
    0    NaN
    1    2.0
    2    3.0
    3    4.0
    dtype: float64
    
  • 将 aSeries直接传递给需要类型的 cython 函数ndarray将不再直接工作,您必须传递Series.values,请参阅增强性能

  • Series(0.5)之前会返回标量0.5,而这将返回一个 1 元素Series

  • 这个改变打破了rpy2<=2.3.8。已针对 rpy2 提出问题,并且GH 5698中详细介绍了解决方法。谢谢@JanSchulz。

  • 对于 0.13 之前创建的 pickle,保留了 Pickle 兼容性。这些必须用酸洗pd.read_pickle,参见酸洗

  • 重构series.py/frame.py/panel.py,将通用代码移至generic.py

    • 添加_setup_axes到创建的通用 NDFrame 结构中

    • 移动方法

      • from_axes,_wrap_array,axes,ix,loc,iloc,shape,empty,swapaxes,transpose,pop

      • __iter__,keys,__contains__,__len__,__neg__,__invert__

      • convert_objects,as_blocks,as_matrix,values

      • __getstate__,__setstate__(兼容性保留在框架/面板中)

      • __getattr__,__setattr__

      • _indexed_same,reindex_like,align,where,mask

      • fillna,replaceSeries替换现在与 一致DataFrame

      • filter(还添加了 axis 参数以选择性地在不同的轴上进行过滤)

      • reindex,reindex_axis,take

      • truncate(移动成为 的一部分NDFrame

  • 这些 API 更改使PanelDataFrame

    • swapaxesPanel在指定相同轴的a 上现在返回一个副本

    • 支持属性访问设置

    • DataFrame过滤器支持与原始过滤器相同的API

  • 不带参数调用重新索引现在将返回输入对象的副本

  • TimeSeries现在是 的别名Series。该属性is_time_series 可用于区分(如果需要)

  • 重构稀疏对象以使用 BlockManager

    • 在内部创建了一个新的块类型,SparseBlock它可以容纳多种数据类型并且是不可合并的。SparseSeries现在SparseDataFrame从层次结构(Series/DataFrame)继承更多方法,并且不再继承SparseArray(而是 的对象SparseBlock

    • 稀疏套件现在支持与非稀疏数据的集成。支持非浮点稀疏数据(部分实现)

    • 对 DataFrame 中稀疏结构的操作应保留稀疏性,合并类型操作将转换为密集(并返回稀疏),因此可能效率较低

    • SparseSeries为布尔值/整数/切片启用 setitem

    • SparsePanels实现不变(例如不使用 BlockManager,需要工作)

  • 向 Series/DataFrame添加了ftypes方法,类似于dtypes,但指示底层是否是稀疏/密集(以及 dtype)

  • 现在,所有NDFrame对象都可以用来__finalize__()指定各种值,以从现有对象传播到新对象(例如,name现在Series将更自动地遵循)

  • 内部类型检查现在通过一组生成的类完成, 无需直接导入 klass,由 @jtratner 提供isinstance(value, klass)

  • 系列更新中的错误,其中父框架未根据更改(GH 4080)或类型(GH 3217)、fillna(GH 3386)更新其缓存

  • 固定数据类型转换的索引(GH 4463GH 4204

  • 重构Series.reindexcore/generic.py (GH 4604GH 4618),允许method=在系列上重新索引以工作

  • Series.copy不再接受order参数,现在与NDFrame复制一致

  • 将方法重构rename为 core/generic.py;修复Series.renameGH 4605),并添加rename 相同的签名Panel

  • 将方法重构clip为 core/generic.py ( GH 4798 )

  • 重构为_get_numeric_data/_get_bool_datacore/generic.py,允许系列/面板功能

  • Series(对于索引)/ Panel(对于项目)现在允许属性访问其元素(GH 1903

    In [109]: s = pd.Series([1, 2, 3], index=list('abc'))
    
    In [110]: s.b
    Out[110]: 2
    
    In [111]: s.a = 5
    
    In [112]: s
    Out[112]: 
    a    5
    b    2
    c    3
    dtype: int64
    

Bug修复

  • HDFStore

    • 引发无效TypeError而不是ValueError附加不同的块排序时(GH 4096

    • read_hdf未遵守已通过的规定modeGH 4504

    • 附加 0 长度表将正常工作(GH 4273

    • to_hdf在传递两个参数时引发append并且 tableGH 4584

    • 从具有跨 dtypes 的重复列的存储中读取数据会引发(GH 4767

    • ValueError修复了列名称不是字符串时无法正确引发的错误( GH 4956

    • 以固定格式编写的零长度系列无法正确反序列化。 (GH 4708

    • 修复了 pyt3 上的解码性能问题(GH 5441

    • 在存储之前验证 MultiIndex 中的级别 ( GH 5527 )

    • 正确处理data_columns面板 ( GH 5717 )

  • 修复了 tslib.tz_convert(vals, tz1, tz2) 中的错误:尝试访问 trans[pos + 1] ( GH 4496 )时可能会引发 IndexError 异常

  • 该参数现在可以与绘图方法中的参数(GH 4102GH 4014by一起正常工作layout*.hist

  • PeriodIndex.map修复了usingstr将返回索引的 str 表示形式的错误( GH 4136 )

  • test_time_series_plot_color_with_empty_kwargs修复了使用自定义 matplotlib 默认颜色时的测试失败( GH 4345

  • 修复 stata IO 测试的运行。现在使用临时文件来写入(GH 4353

  • 修复了比整数值帧DataFrame.sum慢的问题( GH 4365 )DataFrame.mean

  • read_html测试现在可以使用 Python 2.6 ( GH 4351 )

  • 修复了由于局部变量未定义而network引发测试的错误( GH 4381NameError

  • 在 中to_json,如果传递orient会因重复索引而导致数据丢失,则引发 ( GH 4359 )

  • 在 中to_json,修复日期处理,以便毫秒是默认时间戳,如文档字符串所述(GH 4362)。

  • as_index执行 groupby apply 时不再被忽略(GH 4648GH 3417

  • JSON NaT 处理已修复,NaT 现在序列化为null( GH 4498 )

  • 修复了 JSON 对象键中可转义字符的 JSON 处理 ( GH 4593 )

  • 修复了通过keep_default_na=Falsena_values=NoneGH 4318

  • 修复了在values具有重复列和混合数据类型的 DataFrame 上引发错误的错误,出现在(GH 4377)中

  • 修复了重复列和类型转换的错误read_jsonorient='split'GH 4377

  • 修复了 JSON 错误,其中区域设置包含除“.”之外的小数分隔符在编码/解码某些值时抛出异常。 (GH 4918

  • .iat使用PeriodIndex( GH 4390 )修复索引

  • PeriodIndex修复了与 self 联接返回新实例而不是同一实例的问题( GH 4379);还为其他索引类型添加了对此的测试

  • 修复了使用带有 usecols 参数的 CSV cparser 时所有 dtype 都转换为对象的错误 ( GH 3192 )

  • 修复合并块时生成的 DataFrame 已部分设置 _ref_locs 的问题(GH 4403

  • 修复了使用顶级 matplotlib API 调用历史子图时被覆盖的问题 ( GH 4408 )

  • Series.astype(str)修复了调用会截断字符串的错误( GH 4405GH 4437

  • 修复了 py3 兼容性问题,其中字节被重新表示为元组 ( GH 4455 )

  • 修复了项目命名为“a”时面板属性命名冲突的问题(GH 3440

  • 修复了绘图时出现重复索引的问题(GH 4486

  • 修复了 cumsum 和 cumprod 不适用于 bool dtypes 的问题(GH 4170GH 4440

  • xs修复了返回不正确的暗淡对象时发出的面板切片问题( GH 4016

  • 修复重采样错误,如果只有一组,则不使用自定义归约函数(GH 3849GH 4494

  • 带转置框架的固定面板分配 ( GH 3830 )

  • 使用面板和面板作为需要对齐的值来提高集合索引(GH 3777

  • freezeset 对象现在在Series构造函数中引发(GH 4482GH 4480

  • 修复了对具有多个 dtype 的重复 MultiIndex 进行排序的问题 ( GH 4516 )

  • DataFrame.set_values修复了扩展索引时导致名称属性丢失的错误。 (GH 3742GH 4039

  • 修复了单独的问题nameslevels并且labels可以在没有验证的情况下设置MultiIndexGH 3714GH 4039

  • 在数据透视表中修复(GH 3334)。如果 value 是索引,则 Margins 不会计算。

  • 修复具有 rhsnp.timedelta64np.offsets.DateOffset 使用日期时间操作时的错误(GH 4532

  • 修复了使用系列/日期时间索引进行算术运算但np.timedelta64工作不一样的问题(GH 4134)以及 NumPy 1.6 中错误的 timedelta(GH 4135

  • pd.read_clipboard使用 PY3 ( GH 4561 )修复 Windows 上的错误;无法正确解码

  • tslib.get_period_field()现在tslib.get_period_field_arr()如果代码参数超出范围则引发(GH 4519GH 4520

  • 修复空系列上的布尔索引丢失索引名称(GH 4235), infer_dtype 适用于空数组。

  • 修复多轴重新索引;如果轴匹配未替换当前轴,则可能导致延迟频率推断问题(GH 3317

  • 修复了错误地重新引发异常的问题DataFrame.apply(导致原始堆栈跟踪被截断)。

  • 使用和非唯一选择器修复选择ix/locGH 4619

  • 修复涉及现有列( GH 4312GH 5702 )中的 dtype 更改的 iloc/loc 分配,在 core/indexing 中具有内部 setitem_with_indexer 以使用 Block.setitem

  • 修复了 csv_import 中浮点数的千位运算符未正确处理的错误(GH 4322

  • 修复 CacheableOffset 不能被许多 DateOffset 正确使用的问题;这阻止了 DateOffset 被缓存(GH 4609

  • 修复与左侧 DataFrame 和右侧列表/元组的布尔比较(GH 4576

  • None使用setitem修复错误/数据类型转换Series/DataFrame ( GH 4667 )

  • pd.read_stata 修复基于(GH 4626)中传入的非默认编码的解码

  • DataFrame.from_records使用 plain-vanilla修复ndarray。 (GH 4727

  • 修复一些与Index.renameMultiIndex.rename等不一致的问题(GH 4718GH 4628

  • iloc/loc使用横截面和重复索引时出现错误( GH 4726

  • 使用QUOTE_NONEwithto_csv引起的错误Exception。 (GH 4328

  • 当右侧长度不正确时,系列索引的错误不会引发错误(GH 2702

  • 多重索引中的错误,部分字符串选择作为多重索引的一部分(GH 4758

  • 现在将引发使用非唯一索引重新索引索引的错误 ValueErrorGH 4746

  • loc/ix使用具有 MultiIndex 轴和 NumPy 数组的单个索引器进行设置时出现的错误,与 ( GH 3777 )相关

  • 跨 dtype 的重复列串联时出现错误,未与 axis=0 合并(GH 4771GH 4975

  • 错误iloc导致切片索引失败(GH 4771

  • 不正确的错误消息,其中没有 colspecs 或宽度read_fwf。 (GH 4774

  • 修复具有重复索引的系列中的索引错误(GH 4548GH 4550

  • 修复了在 Python 3 中读取压缩文件的错误read_fwf。( GH 3963 )

  • 修复了重复索引和数据类型更改分配的问题 ( GH 4686 )

  • bytes修复了在 as而不是Python 3 中读取压缩文件的错误。str 简化了 Python 3 中的字节生成文件处理(GH 3963GH 4785)。

  • 修复了与不同版本的 matplotlib 之间的对数比例条图的 ticklocs/ticklabels 相关的问题(GH 4789

  • 与 repr() 发出的内部调用相关的抑制 DeprecationWarning ( GH 4391 )

  • 修复了重复索引和重复选择器的问题.locGH 4825

  • 修复了以下问题DataFrame.sort_index:当按单列排序并传递 的列表时ascending, 的参数 ascending被解释为TrueGH 4839GH 4846

  • 修复Panel.tshift不工作。添加了对 (GH 4853freq的支持Panel.shift

  • 修复 TextFileReader w/ Python 引擎(即 PythonParser)中存在数千个 != “,” 的问题(GH 4596

  • 使用 where 时 getitem 中存在重复索引的错误 ( GH 4879 )

  • 修复类型推断代码将浮点列强制转换为日期时间(GH 4601

  • 修复_ensure_numeric不检查复数(GH 4902

  • 修复了传递参数Series.hist时创建两个图形的错误( GH 4112GH 4113)。by

  • convert_objects修复了> 2 ndim 的错误( GH 4937 )

  • 修复了 DataFrame/Panel 缓存插入和后续索引中的错误(GH 4939GH 5424

  • FrozenNDArray修复了and的字符串方法FrozenListGH 4929

  • 修复了在索引扩大场景中设置无效或超出范围值的错误(GH 4940

  • 在空系列( GH 4346 )上测试 fillna ,谢谢@immerrr

  • copy()也修复为浅复制轴/索引,从而保留单独的元数据。 (GH 4202GH 4830

  • 修复了 read_csv 的 Python 解析器中的跳行选项(GH 4382

  • cut修复了在没有明确传递标签的情况下无法使用关卡的错误np.infGH 3415

  • 修复了重叠检查的错误DatetimeIndex.unionGH 4564

  • 修复了 csv_parser 中千位分隔符和日期解析器之间的冲突(GH 4678

  • 修复数据类型不相同时的追加(显示混合 float/np.datetime64 的错误)(GH 4993

  • 修复 DateOffset 的 repr。不再显示 kwds 中的重复条目。删除了未使用的偏移字段。 (GH 4638

  • 修复了使用 usecols 时 read_csv 期间错误的索引名称。仅适用于 c 解析器。 (GH 4201

  • TimestampSeries对象现在可以出现在与or对象的比较操作的左侧DataFrameGH 4982)。

  • np.nan修复使用via进行索引时的错误iloc/loc( GH 5016 )

  • 修复了低内存 c 解析器可以在同一文件的不同块中创建不同类型的错误。现在强制转换为数字类型或引发警告。 (GH 3866

  • 修复了将 a 重塑Series为自己的形状时引发的 错误TypeError( GH 4554 ) 以及其他重塑问题。

  • 设置ix/loc混合 int/string 索引时出现错误 ( GH 4544 )

  • 确保系列间布尔比较是基于标签的(GH 4947

  • 使用时间戳部分索引器的多级索引中的错误(GH 4294

  • 测试/修复全 nan 框架的多索引构造(GH 4078

  • read_html()修复了无法正确推断带逗号的表值的错误( GH 5029 )

  • read_html()修复了未提供返回表的稳定排序的错误( GH 4770GH 5029)。

  • read_html()修复了传递时错误解析的错误index_col=0GH 5066)。

  • read_html()修复了错误推断标头类型的错误( GH 5048 )。

  • DatetimeIndex修复了连接PeriodIndex导致堆栈溢出的错误( GH 3899 )。

  • groupby修复了对象不允许绘图的错误( GH 5102)。

  • groupby修复了对象不是制表符完成列名称的错误( GH 5102 )。

  • groupby.plot()修复了我和朋友多次重复数字的错误( GH 5102)。

  • object提供fillna 上 dtypes的自动转换,相关( GH 5103

  • 修复了选项解析器清理中默认选项被覆盖的错误 ( GH 5121 )。

  • iloc使用类似列表(GH 5006)进行索引时,对待列表/ndarray 相同

  • 修复MultiIndex.get_level_values()缺失值(GH 5074

  • 修复带有 datetime64 输入的 Timestamp() 的绑定检查 ( GH 4065 )

  • TestReadHtml修复未调用正确函数的错误read_html()GH 5150)。

  • 修复了一个错误,NDFrame.replace()该错误使替换看起来好像是(错误地)使用正则表达式(GH 5143)。

  • 修复 to_datetime 的更好错误消息(GH 4928

  • 确保在 travis-ci ( GH 4918 ) 上测试不同的区域设置。还添加了一些实用程序,用于使用上下文管理器获取区域设置和设置区域设置。

  • 修复了段错误isnull(MultiIndex)(现在会引发错误)(GH 5123GH 5125

  • 执行对齐操作时允许重复索引(GH 5185GH 5639

  • 构造函数中的复合数据类型引发NotImplementedError ( GH 5191 )

  • 比较重复帧(GH 4421)相关的错误

  • 重复帧描述中的错误

  • to_datetime格式错误但coerce=True不提高(GH 5195

  • loc设置多个索引器和需要广播的系列的 rhs时出现错误( GH 5206

  • 修复了就地设置级别或标签MultiIndex不会清除缓存values属性并因此返回错误的错误values。 (GH 5215

  • 修复了过滤分组数据帧或系列不保持原始顺序的错误(GH 4621)。

  • 修复了Period营业日期频率,以便在非营业日期时始终前滚。 (GH 5203

  • 修复了 Excel 编写器中未正确写入具有重复列名称的框架的错误。 (GH 5235

  • 修复了drop系列上的非唯一索引问题(GH 5248

  • 修复了 C 解析器中由于传递的名称多于文件中的列而导致的段错误。 (GH 5156

  • 修复Series.isin类似日期/时间的 dtypes ( GH 5021 )

  • C 和 Python 解析器现在可以处理更常见的 MultiIndex 列格式,该格式没有索引名称行(GH 4702

  • 尝试使用越界日期作为对象数据类型时出现错误(GH 5312

  • 尝试显示嵌入的 PandasObject 时出现错误(GH 5324

  • 如果结果与越界相关,则允许操作时间戳返回日期时间(GH 5312

  • 修复 的返回值/类型签名以initObjToJSON()与 numpy 兼容import_array()GH 5334GH 5326

  • 在 DataFrame 上重命名然后 set_index 时出现错误(GH 5344

  • 测试图形时,测试套件不再留下临时文件。 (GH 5347)(感谢您捕捉到这个@yarikoptic!)

  • 修复了 win32 上的 html 测试。 (GH 4580

  • 确保head/tail基于iloc,( GH 5370 )

  • PeriodIndex修复了存在 1 或 2 个元素时字符串表示的错误。 (GH 5372

  • GroupBy 方法transformfilter用于具有重复(非唯一)索引的 Series 和 DataFrame。 (GH 4620

  • 修复空系列不在 repr 中打印名称(GH 4651

  • 使测试默认在临时目录中创建临时文件。 (GH 5419

  • pd.to_timedelta标量的返回标量 ( GH 5410 )

  • pd.to_timedelta接受NaN并且NaT,返回NaT而不是提高(GH 5437

  • isnull大尺寸 pandas 对象的性能改进

  • 修复了具有与索引器长度不匹配的 1d ndarray 的各种 setitem ( GH 5508 )

  • 具有 MultiIndex 和iloc( GH 5528 )的 getitem 中的错误

  • 系列上的 delitem 中的错误 ( GH 5542 )

  • 使用自定义函数且对象未发生突变时应用中的错误修复(GH 5545

  • 从非唯一索引中选择时出现错误locGH 5553

  • 当用户函数返回 a 时,groupby 返回不一致类型的错误NoneGH 5592

  • 解决 numpy 1.7.0 中的回归问题,该回归错误地引发 IndexError ndarray.item( GH 5666 )

  • 重复索引对象并产生非唯一索引时出现错误(GH 5678

  • 系列和传递的系列/字典中的 fillna 中的错误(GH 5703

  • 使用类似日期时间的石斑鱼进行 groupby 转换时出现错误 ( GH 5712 )

  • 使用某些键时,PY3 中的 MultiIndex 选择存在错误(GH 5725

  • 不同数据类型的按行连接在某些情况下失败(GH 5754

贡献者#

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

  • 阿古斯丁·赫兰兹 +

  • 亚历克斯·高迪奥 +

  • 亚历克斯·罗斯伯格 +

  • 安德烈亚斯·克洛斯特曼 +

  • 安德烈亚斯·维尔 +

  • 安迪·海登

  • 本·亚历克斯+

  • 本尼迪克特·索尔 +

  • 布拉德·布兰

  • 凯莱布·爱泼斯坦 +

  • 常社

  • 克里斯托弗·惠兰

  • 帝斯曼+

  • 戴尔·荣格 +

  • 丹·伯肯

  • 大卫·拉什 +

  • 迪特·范登布斯切

  • 加比·达瓦尔 +

  • 加勒特·德拉帕拉

  • 高洋+

  • 格雷格·雷达 +

  • 伊万·斯米尔诺夫 +

  • 杰克·凯利 +

  • 雅各布·谢尔 +

  • 扬·舒尔茨 +

  • 杰夫·特拉特纳

  • 杰弗里·特拉特纳

  • 约翰·麦克纳马拉 +

  • 约翰·W·奥布莱恩 +

  • 乔里斯·范登博什

  • 贾斯汀·博佐尼尔 +

  • 凯尔西·乔达尔

  • 凯文·斯通

  • 基兰·奥马霍尼

  • 凯尔·豪斯曼 +

  • 凯尔·凯利 +

  • 凯尔·迈耶

  • 迈克·凯利

  • 莫尔塔达·梅哈尔 +

  • 尼克·福蒂 +

  • 奥利维尔·哈里斯 +

  • Ondřej Čertík +

  • PKEuS

  • 菲利普·克劳德

  • 皮埃尔·海西格 +

  • 理查德·T·盖伊 +

  • 罗曼·佩卡 +

  • 韩贤振

  • 船长西博尔德

  • 斯滕+

  • 托马斯·卡斯威尔 +

  • 托马斯·克鲁弗

  • 蒂亚戈·雷凯霍 +

  • 汤姆·奥格斯普格

  • 特伦特·豪克

  • 瓦伦丁·哈内尔 +

  • 维克托·科尔克兹 +

  • 文森特·阿瑞尔-邦多克

  • 韦斯·麦金尼

  • 韦斯·特纳 +

  • 韦斯顿·雷诺德 +

  • 雅罗斯拉夫·哈尔琴科

  • 扎克·德维尔 +

  • 萧启文 +

  • 伙计们 +

  • d10基因+

  • 丹尼尔巴兰

  • 白日梦+

  • 恩斯特罗姆+

  • 杰雷巴克

  • 莫妮卡蜜蜂 +

  • 普罗萨尔+

  • 摇滚+

  • 乌努特布+

  • 西特纳+

  • yp

  • 扎克·鲍尔斯