版本 0.13.0(2014 年 1 月 3 日)# 这是 0.12.0 的主要版本,包括许多 API 更改、一些新功能和增强功能以及大量错误修复。 亮点包括: 支持新的索引类型Float64Index和其他索引增强功能 HDFStore具有用于查询规范的新的基于字符串的语法 支持新的插值方法 更新timedelta操作 一种新的字符串操作方法extract 对偏移量的纳秒支持 isin对于数据框 添加了一些实验性功能,包括: eval/query表达评估的新方法 支持msgpack序列化 与 Google 的 I/O 接口BigQuery 它们是几个新的或更新的文档部分,包括: 与 SQL 的比较,这对于那些熟悉 SQL 但仍在学习 pandas 的人来说应该很有用。 与 R 的比较,从 R 到 pandas 的习语翻译。 增强性能,增强 pandas 性能的方法eval/query。 警告 在 0.13.0 中Series,内部已被重构为不再是 subclassndarray 而是 subclass NDFrame,类似于 pandas 容器的其余部分。这应该是一个透明的更改,仅对 API 产生非常有限的影响。请参阅内部重构 API 更改# read_excel现在在其参数中支持整数sheetname,给出要读入的工作表的索引(GH 4301)。 文本解析器现在将任何类似 inf 的内容(“inf”、“Inf”、“-Inf”、“iNf”等)视为无穷大。 (GH 4220、GH 4219),影响 read_table、read_csv等。 pandas感谢 @jtratner,现在 Python 2/3 兼容,无需 2to3。因此,pandas 现在更广泛地使用迭代器。这也导致将 Benjamin Petersonsix图书馆的实质性部分引入 compat。 (GH 4384、GH 4375、 GH 4372) pandas.util.compat并pandas.util.py3compat已合并到 pandas.compat.pandas.compat现在包含许多允许 2/3 兼容性的功能。它包含范围、过滤器、映射和 zip 的列表和迭代器版本,以及 Python 3 兼容性的其他必要元素。lmap、lzip、lrange以及lfilter所有生成列表而不是迭代器,以与numpy、 下标和pandas构造函数兼容。(GH 4384、GH 4375、GH 4372) Series.get[]使用负索引器现在返回与(GH 4390)相同 Index对元数据处理方式和处理方式的更改MultiIndex(levels、、 labels和names)(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 1073,GH 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(Series、DataFrame、Panel、Panel4D、 SparsePanel等)现在支持整套算术运算符和算术 Flex 方法(add、sub、mul 等)。SparsePanel不支持pow或mod具有非标量。 (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.argmin和Series.argmax现在别名为Series.idxmin和Series.idxmax。这些返回的索引分别为最小或最大元素。在 0.13.0 之前,这些将返回最小/最大元素的位置。 (GH 6214) 先前版本弃用/更改# 这些更改是在 0.12 或更早版本中宣布的,自 0.13.0 起生效 删除已弃用的Factor(GH 3650) 删除已弃用的set_printoptions/reset_printoptions(GH 3046) 删除已弃用的_verbose_info(GH 3215) read_clipboard/to_clipboard/ExcelFile/ExcelWriter从pandas.io.parsers(GH 3717 )中删除已弃用的内容,这些可用作主 pandas 命名空间中的函数(例如pd.read_clipboard) tupleize_cols现在和的默认值False都是。 0.12 中的公平警告(GH 3604)to_csvread_csv 现在的默认值display.max_seq_len是 100 而不是None.这会激活不同位置的长序列的截断显示(“...”)。 (GH 3391) 弃用# 0.13.0 中已弃用 deprecated iterkv,它将在未来版本中删除(这是用于绕过 的2to3更改的 iteritems 的别名)。 (GH 4384、GH 4375、GH 4372) 已弃用 string 方法match,其作用现在由 更惯用地执行extract。在将来的版本中, 的默认行为match将更改为类似于contains,它返回一个布尔索引器。 (它们的区别在于严格性:match依赖re.match而 contains依赖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_table(GH 4625) 传递商店创建参数;可用于支持内存存储 DataFrame repr 更改# DataFrame现在,一旦表格超过一定大小,HTML 和纯文本表示形式就会显示表格的截断视图,而不是切换到短信息视图( GH 4886、GH 5550)。随着小 DataFrame 变大,这使得表示更加一致。 要获取信息视图,请致电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_method和 ind,分别传递给 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 ) 频率获得了几个新的偏移量: LastWeekOfMonth(GH 4637) FY5253,和FY5253Quarter(GH 4511) DataFrame有一个新interpolate方法,类似于Series(GH 4434,GH 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.eval,DataFrame有一个新 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 4080、GH 3862、GH 816)DataFramePanelndarray 警告 < 0.13.0 存在两个潜在的不兼容性 Series如果将 aSeries 作为参数传递,则使用某些 numpy 函数之前会返回 a 。这似乎只影响np.ones_like、np.empty_like和 np.diff。np.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,replace(Series替换现在与 一致DataFrame) filter(还添加了 axis 参数以选择性地在不同的轴上进行过滤) reindex,reindex_axis,take truncate(移动成为 的一部分NDFrame) 这些 API 更改使Panel与DataFrame 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 4463,GH 4204) 重构Series.reindexcore/generic.py (GH 4604、GH 4618),允许method=在系列上重新索引以工作 Series.copy不再接受order参数,现在与NDFrame复制一致 将方法重构rename为 core/generic.py;修复Series.rename(GH 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未遵守已通过的规定mode(GH 4504) 附加 0 长度表将正常工作(GH 4273) to_hdf在传递两个参数时引发append并且 table(GH 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 4102、GH 4014)by一起正常工作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 4381)NameError 在 中to_json,如果传递orient会因重复索引而导致数据丢失,则引发 ( GH 4359 ) 在 中to_json,修复日期处理,以便毫秒是默认时间戳,如文档字符串所述(GH 4362)。 as_index执行 groupby apply 时不再被忽略(GH 4648, GH 3417) JSON NaT 处理已修复,NaT 现在序列化为null( GH 4498 ) 修复了 JSON 对象键中可转义字符的 JSON 处理 ( GH 4593 ) 修复了通过keep_default_na=False时na_values=None (GH 4318) 修复了在values具有重复列和混合数据类型的 DataFrame 上引发错误的错误,出现在(GH 4377)中 修复了重复列和类型转换的错误read_json( orient='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 4405、GH 4437) 修复了 py3 兼容性问题,其中字节被重新表示为元组 ( GH 4455 ) 修复了项目命名为“a”时面板属性命名冲突的问题(GH 3440) 修复了绘图时出现重复索引的问题(GH 4486) 修复了 cumsum 和 cumprod 不适用于 bool dtypes 的问题(GH 4170、GH 4440) xs修复了返回不正确的暗淡对象时发出的面板切片问题( GH 4016) 修复重采样错误,如果只有一组,则不使用自定义归约函数(GH 3849,GH 4494) 带转置框架的固定面板分配 ( GH 3830 ) 使用面板和面板作为需要对齐的值来提高集合索引(GH 3777) freezeset 对象现在在Series构造函数中引发(GH 4482、 GH 4480) 修复了对具有多个 dtype 的重复 MultiIndex 进行排序的问题 ( GH 4516 ) DataFrame.set_values修复了扩展索引时导致名称属性丢失的错误。 (GH 3742,GH 4039) 修复了单独的问题names,levels并且labels可以在没有验证的情况下设置MultiIndex(GH 3714,GH 4039) 在数据透视表中修复(GH 3334)。如果 value 是索引,则 Margins 不会计算。 修复具有 rhsnp.timedelta64或np.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 4519,GH 4520) 修复空系列上的布尔索引丢失索引名称(GH 4235), infer_dtype 适用于空数组。 修复多轴重新索引;如果轴匹配未替换当前轴,则可能导致延迟频率推断问题(GH 3317) 修复了错误地重新引发异常的问题DataFrame.apply(导致原始堆栈跟踪被截断)。 使用和非唯一选择器修复选择ix/loc(GH 4619) 修复涉及现有列( GH 4312、GH 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.rename和MultiIndex.rename等不一致的问题(GH 4718,GH 4628) iloc/loc使用横截面和重复索引时出现错误( GH 4726) 使用QUOTE_NONEwithto_csv引起的错误Exception。 (GH 4328) 当右侧长度不正确时,系列索引的错误不会引发错误(GH 2702) 多重索引中的错误,部分字符串选择作为多重索引的一部分(GH 4758) 现在将引发使用非唯一索引重新索引索引的错误 ValueError(GH 4746) loc/ix使用具有 MultiIndex 轴和 NumPy 数组的单个索引器进行设置时出现的错误,与 ( GH 3777 )相关 跨 dtype 的重复列串联时出现错误,未与 axis=0 合并(GH 4771、GH 4975) 错误iloc导致切片索引失败(GH 4771) 不正确的错误消息,其中没有 colspecs 或宽度read_fwf。 (GH 4774) 修复具有重复索引的系列中的索引错误(GH 4548、 GH 4550) 修复了在 Python 3 中读取压缩文件的错误read_fwf。( GH 3963 ) 修复了重复索引和数据类型更改分配的问题 ( GH 4686 ) bytes修复了在 as而不是Python 3 中读取压缩文件的错误。str 简化了 Python 3 中的字节生成文件处理(GH 3963、GH 4785)。 修复了与不同版本的 matplotlib 之间的对数比例条图的 ticklocs/ticklabels 相关的问题(GH 4789) 与 repr() 发出的内部调用相关的抑制 DeprecationWarning ( GH 4391 ) 修复了重复索引和重复选择器的问题.loc (GH 4825) 修复了以下问题DataFrame.sort_index:当按单列排序并传递 的列表时ascending, 的参数 ascending被解释为True(GH 4839、 GH 4846) 修复Panel.tshift不工作。添加了对 (GH 4853)freq的支持Panel.shift 修复 TextFileReader w/ Python 引擎(即 PythonParser)中存在数千个 != “,” 的问题(GH 4596) 使用 where 时 getitem 中存在重复索引的错误 ( GH 4879 ) 修复类型推断代码将浮点列强制转换为日期时间(GH 4601) 修复_ensure_numeric不检查复数(GH 4902) 修复了传递参数Series.hist时创建两个图形的错误( GH 4112、GH 4113)。by convert_objects修复了> 2 ndim 的错误( GH 4937 ) 修复了 DataFrame/Panel 缓存插入和后续索引中的错误(GH 4939、GH 5424) FrozenNDArray修复了and的字符串方法FrozenList (GH 4929) 修复了在索引扩大场景中设置无效或超出范围值的错误(GH 4940) 在空系列( GH 4346 )上测试 fillna ,谢谢@immerrr copy()也修复为浅复制轴/索引,从而保留单独的元数据。 (GH 4202、GH 4830) 修复了 read_csv 的 Python 解析器中的跳行选项(GH 4382) cut修复了在没有明确传递标签的情况下无法使用关卡的错误np.inf(GH 3415) 修复了重叠检查的错误DatetimeIndex.union (GH 4564) 修复了 csv_parser 中千位分隔符和日期解析器之间的冲突(GH 4678) 修复数据类型不相同时的追加(显示混合 float/np.datetime64 的错误)(GH 4993) 修复 DateOffset 的 repr。不再显示 kwds 中的重复条目。删除了未使用的偏移字段。 (GH 4638) 修复了使用 usecols 时 read_csv 期间错误的索引名称。仅适用于 c 解析器。 (GH 4201) TimestampSeries对象现在可以出现在与or对象的比较操作的左侧DataFrame(GH 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 4770、GH 5029)。 read_html()修复了传递时错误解析的错误index_col=0(GH 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 5123、GH 5125) 执行对齐操作时允许重复索引(GH 5185,GH 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 5334、GH 5326) 在 DataFrame 上重命名然后 set_index 时出现错误(GH 5344) 测试图形时,测试套件不再留下临时文件。 (GH 5347)(感谢您捕捉到这个@yarikoptic!) 修复了 win32 上的 html 测试。 (GH 4580) 确保head/tail基于iloc,( GH 5370 ) PeriodIndex修复了存在 1 或 2 个元素时字符串表示的错误。 (GH 5372) GroupBy 方法transform可filter用于具有重复(非唯一)索引的 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) 从非唯一索引中选择时出现错误loc(GH 5553) 当用户函数返回 a 时,groupby 返回不一致类型的错误None(GH 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 扎克·鲍尔斯