版本 0.18.1(2016 年 5 月 3 日)# 这是 0.18.0 的一个小错误修复版本,包含大量错误修复以及一些新功能、增强功能和性能改进。我们建议所有用户升级到此版本。 亮点包括: .groupby(...)已得到增强,可以在使用.rolling(..),.expanding(..)和.resample(..)每个组时提供方便的语法,请参阅此处 pd.to_datetime()已经获得了从 a 组装日期的能力DataFrame,请参见此处 方法链接改进,请参见此处。 自定义营业时间偏移,请参阅此处。 处理中的许多错误修复sparse,请参见此处 通过现代熊猫的功能扩展了教程部分,由@TomAugsburger提供。 (GH 13045)。 v0.18.1 中的新增功能 新功能 自定义营业时间 .groupby(..)具有窗口和重采样操作的方法语法 方法链接改进 方法.where()和.mask() 方法.loc[],.iloc[],.ix[] 索引与[] DatetimeIndex当a的一部分时的部分字符串索引MultiIndex 组装日期时间 其他增强功能 稀疏的变化 API变更 方法.groupby(..).nth()变更 NumPy 函数兼容性 .apply在 GroupBy 重采样上使用 read_csv例外情况的变化 方法to_datetime错误改变 其他 API 更改 弃用 性能改进 Bug修复 贡献者 新功能# 自定义营业时间# 它是和CustomBusinessHour的混合,它允许您指定任意假期。详情请参见自定义营业时间(GH 11514)BusinessHourCustomBusinessDay In [1]: from pandas.tseries.offsets import CustomBusinessHour In [2]: from pandas.tseries.holiday import USFederalHolidayCalendar In [3]: bhour_us = CustomBusinessHour(calendar=USFederalHolidayCalendar()) 马丁·路德·金纪念日之前的星期五 In [4]: import datetime In [5]: dt = datetime.datetime(2014, 1, 17, 15) In [6]: dt + bhour_us Out[6]: Timestamp('2014-01-17 16:00:00') 马丁·路德·金纪念日后的星期二(周一因假期而被跳过) In [7]: dt + bhour_us * 2 Out[7]: Timestamp('2014-01-20 09:00:00') .groupby(..)带有窗口和重采样操作的方法语法# .groupby(...)已得到增强,可以在使用.rolling(..),.expanding(..)和.resample(..)每组时提供方便的语法,请参阅(GH 12486、GH 12738)。 您现在可以使用.rolling(..)and.expanding(..)作为 groupby 的方法。它们返回另一个延迟对象(类似于对未分组的 pandas 对象执行的操作).rolling()。然后您可以以类似的方式.expanding()操作这些对象。RollingGroupby 以前,您必须执行此操作才能获得每组的滚动窗口平均值: In [8]: df = pd.DataFrame({"A": [1] * 20 + [2] * 12 + [3] * 8, "B": np.arange(40)}) In [9]: df Out[9]: A B 0 1 0 1 1 1 2 1 2 3 1 3 4 1 4 .. .. .. 35 3 35 36 3 36 37 3 37 38 3 38 39 3 39 [40 rows x 2 columns] In [1]: df.groupby("A").apply(lambda x: x.rolling(4).B.mean()) Out[1]: A 1 0 NaN 1 NaN 2 NaN 3 1.5 4 2.5 5 3.5 6 4.5 7 5.5 8 6.5 9 7.5 10 8.5 11 9.5 12 10.5 13 11.5 14 12.5 15 13.5 16 14.5 17 15.5 18 16.5 19 17.5 2 20 NaN 21 NaN 22 NaN 23 21.5 24 22.5 25 23.5 26 24.5 27 25.5 28 26.5 29 27.5 30 28.5 31 29.5 3 32 NaN 33 NaN 34 NaN 35 33.5 36 34.5 37 35.5 38 36.5 39 37.5 Name: B, dtype: float64 现在你可以这样做: In [10]: df.groupby("A").rolling(4).B.mean() Out[10]: A 1 0 NaN 1 NaN 2 NaN 3 1.5 4 2.5 ... 3 35 33.5 36 34.5 37 35.5 38 36.5 39 37.5 Name: B, Length: 40, dtype: float64 对于.resample(..)操作类型,以前您必须: In [11]: df = pd.DataFrame( ....: { ....: "date": pd.date_range(start="2016-01-01", periods=4, freq="W"), ....: "group": [1, 1, 2, 2], ....: "val": [5, 6, 7, 8], ....: } ....: ).set_index("date") ....: In [12]: df Out[12]: group val date 2016-01-03 1 5 2016-01-10 1 6 2016-01-17 2 7 2016-01-24 2 8 [4 rows x 2 columns] In[1]: df.groupby("group").apply(lambda x: x.resample("1D").ffill()) Out[1]: group val group date 1 2016-01-03 1 5 2016-01-04 1 5 2016-01-05 1 5 2016-01-06 1 5 2016-01-07 1 5 2016-01-08 1 5 2016-01-09 1 5 2016-01-10 1 6 2 2016-01-17 2 7 2016-01-18 2 7 2016-01-19 2 7 2016-01-20 2 7 2016-01-21 2 7 2016-01-22 2 7 2016-01-23 2 7 2016-01-24 2 8 现在你可以这样做: In[1]: df.groupby("group").resample("1D").ffill() Out[1]: group val group date 1 2016-01-03 1 5 2016-01-04 1 5 2016-01-05 1 5 2016-01-06 1 5 2016-01-07 1 5 2016-01-08 1 5 2016-01-09 1 5 2016-01-10 1 6 2 2016-01-17 2 7 2016-01-18 2 7 2016-01-19 2 7 2016-01-20 2 7 2016-01-21 2 7 2016-01-22 2 7 2016-01-23 2 7 2016-01-24 2 8 方法链接改进# 以下方法/索引器现在接受callable.其目的是使这些在方法链中更有用,请参阅文档。 (GH 11485,GH 12533) .where()和.mask() .loc[],iloc[]和.ix[] []索引 方法.where()和.mask()# 它们可以接受条件和other 参数的可调用。 In [13]: df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6], "C": [7, 8, 9]}) In [14]: df.where(lambda x: x > 4, lambda x: x + 10) Out[14]: A B C 0 11 14 7 1 12 5 8 2 13 6 9 [3 rows x 3 columns] 方法.loc[],.iloc[],.ix[]# 它们可以接受可调用的和可调用的元组作为切片器。可调用函数可以返回有效的布尔索引器或对这些索引器的输入有效的任何内容。 # callable returns bool indexer In [15]: df.loc[lambda x: x.A >= 2, lambda x: x.sum() > 10] Out[15]: B C 1 5 8 2 6 9 [2 rows x 2 columns] # callable returns list of labels In [16]: df.loc[lambda x: [1, 2], lambda x: ["A", "B"]] Out[16]: A B 1 2 5 2 3 6 [2 rows x 2 columns] 用#建立索引[] []最后,您可以在Series、DataFrame 和 Panel 的索引中使用可调用函数。可调用对象必须[]根据其类和索引类型返回有效的索引输入。 In [17]: df[lambda x: "A"] Out[17]: 0 1 1 2 2 3 Name: A, Length: 3, dtype: int64 使用这些方法/索引器,您可以链接数据选择操作,而无需使用临时变量。 In [18]: bb = pd.read_csv("data/baseball.csv", index_col="id") In [19]: (bb.groupby(["year", "team"]).sum(numeric_only=True).loc[lambda df: df.r > 100]) Out[19]: stint g ab r h X2b ... so ibb hbp sh sf gidp year team ... 2007 CIN 6 379 745 101 203 35 ... 127.0 14.0 1.0 1.0 15.0 18.0 DET 5 301 1062 162 283 54 ... 176.0 3.0 10.0 4.0 8.0 28.0 HOU 4 311 926 109 218 47 ... 212.0 3.0 9.0 16.0 6.0 17.0 LAN 11 413 1021 153 293 61 ... 141.0 8.0 9.0 3.0 8.0 29.0 NYN 13 622 1854 240 509 101 ... 310.0 24.0 23.0 18.0 15.0 48.0 SFN 5 482 1305 198 337 67 ... 188.0 51.0 8.0 16.0 6.0 41.0 TEX 2 198 729 115 200 40 ... 140.0 4.0 5.0 2.0 8.0 16.0 TOR 4 459 1408 187 378 96 ... 265.0 16.0 12.0 4.0 16.0 38.0 [8 rows x 18 columns] 当#DatetimeIndex的一部分时部分字符串索引MultiIndex 部分字符串索引现在匹配a ( GH 10331 )DateTimeIndex的一部分MultiIndex In [20]: dft2 = pd.DataFrame( ....: np.random.randn(20, 1), ....: columns=["A"], ....: index=pd.MultiIndex.from_product( ....: [pd.date_range("20130101", periods=10, freq="12H"), ["a", "b"]] ....: ), ....: ) ....: In [21]: dft2 Out[21]: A 2013-01-01 00:00:00 a 0.469112 b -0.282863 2013-01-01 12:00:00 a -1.509059 b -1.135632 2013-01-02 00:00:00 a 1.212112 ... ... 2013-01-04 12:00:00 b 0.271860 2013-01-05 00:00:00 a -0.424972 b 0.567020 2013-01-05 12:00:00 a 0.276232 b -1.087401 [20 rows x 1 columns] In [22]: dft2.loc["2013-01-05"] Out[22]: A 2013-01-05 00:00:00 a -0.424972 b 0.567020 2013-01-05 12:00:00 a 0.276232 b -1.087401 [4 rows x 1 columns] 在其他层面上 In [26]: idx = pd.IndexSlice In [27]: dft2 = dft2.swaplevel(0, 1).sort_index() In [28]: dft2 Out[28]: A a 2013-01-01 00:00:00 0.469112 2013-01-01 12:00:00 -1.509059 2013-01-02 00:00:00 1.212112 2013-01-02 12:00:00 0.119209 2013-01-03 00:00:00 -0.861849 ... ... b 2013-01-03 12:00:00 1.071804 2013-01-04 00:00:00 -0.706771 2013-01-04 12:00:00 0.271860 2013-01-05 00:00:00 0.567020 2013-01-05 12:00:00 -1.087401 [20 rows x 1 columns] In [29]: dft2.loc[idx[:, "2013-01-05"], :] Out[29]: A a 2013-01-05 00:00:00 -0.424972 2013-01-05 12:00:00 0.276232 b 2013-01-05 00:00:00 0.567020 2013-01-05 12:00:00 -1.087401 [4 rows x 1 columns] 组装日期时间# pd.to_datetime()已经获得了从传入的DataFrame或字典中组装日期时间的能力。 (GH 8158)。 In [20]: df = pd.DataFrame( ....: {"year": [2015, 2016], "month": [2, 3], "day": [4, 5], "hour": [2, 3]} ....: ) ....: In [21]: df Out[21]: year month day hour 0 2015 2 4 2 1 2016 3 5 3 [2 rows x 4 columns] 使用传递过来的框架进行组装。 In [22]: pd.to_datetime(df) Out[22]: 0 2015-02-04 02:00:00 1 2016-03-05 03:00:00 Length: 2, dtype: datetime64[ns] 您只能传递需要组装的列。 In [23]: pd.to_datetime(df[["year", "month", "day"]]) Out[23]: 0 2015-02-04 1 2016-03-05 Length: 2, dtype: datetime64[ns] 其他增强功能# pd.read_csv()现在支持delim_whitespace=TruePython引擎(GH 12958) pd.read_csv()现在支持通过扩展名推断或显式打开包含单个 CSV 的 ZIP 文件compression='zip'( GH 12175 ) pd.read_csv()现在支持使用 xz 压缩打开文件,通过扩展名推断或显式compression='xz'指定;压缩也以同样的方式xz支持( GH 11852)DataFrame.to_csv pd.read_msgpack()现在即使使用压缩(GH 12359)也总是给出可写的 ndarrays 。 pd.read_msgpack()现在支持使用 msgpack 对分类进行序列化和反序列化(GH 12573) .to_json()现在支持NDFrames包含分类和稀疏数据(GH 10778) interpolate()现在支持method='akima'(GH 7588)。 pd.read_excel()现在接受文件路径的路径对象(例如pathlib.Path,py.path.local),与其他read_*函数(GH 12655)一致 .weekday_name将属性作为组件添加到访问器DatetimeIndex中.dt。 (GH 11128) Index.take现在处理allow_fill并fill_value一致(GH 12631) In [24]: idx = pd.Index([1.0, 2.0, 3.0, 4.0], dtype="float") # default, allow_fill=True, fill_value=None In [25]: idx.take([2, -1]) Out[25]: Index([3.0, 4.0], dtype='float64') In [26]: idx.take([2, -1], fill_value=True) Out[26]: Index([3.0, nan], dtype='float64') Index现在支持.str.get_dummies()which return MultiIndex,请参阅创建指示变量(GH 10008,GH 10103) In [27]: idx = pd.Index(["a|b", "a|c", "b|c"]) In [28]: idx.str.get_dummies("|") Out[28]: MultiIndex([(1, 1, 0), (1, 0, 1), (0, 1, 1)], names=['a', 'b', 'c']) pd.crosstab()获得了normalize规范化频率表的论据(GH 12569)。此处更新的文档中的示例。 .resample(..).interpolate()现已支持(GH 12925) .isin()现在接受通过sets(GH 12988) 稀疏的变化# 这些更改符合稀疏处理以返回正确的类型,并致力于提供更流畅的索引体验。 SparseArray.take现在为其他标量输入返回一个标量SparseArray。此外,它使用与Index(GH 10560,GH 12796)相同的规则处理负索引器 s = pd.SparseArray([np.nan, np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 6]) s.take(0) s.take([1, 2, 3]) 加薪SparseSeries[]索引中的错误(GH 9467)EllipsisKeyError 元组索引中的错误SparseArray[]未正确处理(GH 12966) SparseSeries.loc[]类似列表的输入引发错误TypeError(GH 10560) SparseSeries.iloc[]标量输入中的错误可能会引发IndexError(GH 10560) 错误SparseSeries.loc[],.iloc[]返回slice,SparseArray而不是SparseSeries(GH 10560) 错误SparseDataFrame.loc[],.iloc[]可能会导致密集Series,而不是SparseSeries(GH 12787) 另外错误SparseArray忽略了fill_value右手边(GH 12910) mod中的错误SparseArray引发AttributeError(GH 12910) pow中的错误SparseArray计算为必须为 1 ( GH 12910 )1 ** np.nannp.nan SparseArray比较输出中的错误可能会导致错误结果或引发错误ValueError(GH 12971) 当长度超过( GH 10560 )时,错误就会SparseSeries.__repr__出现TypeErrormax_rows SparseSeries.shape忽略错误fill_value(GH 10452) 错误SparseSeries并且可能与其密集值SparseArray不同( GH 12908)dtype 错误SparseSeries.reindex处理错误fill_value(GH 12797) SparseArray.to_frame()结果中的错误DataFrame,而不是SparseDataFrame(GH 9850) BugSparseSeries.value_counts()不算在内fill_value(GH 6749) 错误SparseArray.to_dense()不保留dtype(GH 10648) 错误SparseArray.to_dense()处理错误fill_value(GH 12797) 密集结果中pd.concat()的错误( GH 10536)SparseSeries 错误处理pd.concat()的错误(GH 9765)SparseDataFramefill_value pd.concat()可能SparseDataFrame会引发错误AttributeError(GH 12174) 错误SparseArray.shift()可能会引发NameError或TypeError(GH 12908) API 更改# 方法.groupby(..).nth()改变# 当传递参数时,输出中的索引.groupby(..).nth()现在更加一致( GH 11039):as_index In [29]: df = pd.DataFrame({"A": ["a", "b", "a"], "B": [1, 2, 3]}) In [30]: df Out[30]: A B 0 a 1 1 b 2 2 a 3 [3 rows x 2 columns] 以前的行为: In [3]: df.groupby('A', as_index=True)['B'].nth(0) Out[3]: 0 1 1 2 Name: B, dtype: int64 In [4]: df.groupby('A', as_index=False)['B'].nth(0) Out[4]: 0 1 1 2 Name: B, dtype: int64 新行为: In [31]: df.groupby("A", as_index=True)["B"].nth(0) Out[31]: 0 1 1 2 Name: B, Length: 2, dtype: int64 In [32]: df.groupby("A", as_index=False)["B"].nth(0) Out[32]: 0 1 1 2 Name: B, Length: 2, dtype: int64 此外,以前,a.groupby总是排序,无论是否sort=False通过 传递.nth()。 In [33]: np.random.seed(1234) In [34]: df = pd.DataFrame(np.random.randn(100, 2), columns=["a", "b"]) In [35]: df["c"] = np.random.randint(0, 4, 100) 以前的行为: In [4]: df.groupby('c', sort=True).nth(1) Out[4]: a b c 0 -0.334077 0.002118 1 0.036142 -2.074978 2 -0.720589 0.887163 3 0.859588 -0.636524 In [5]: df.groupby('c', sort=False).nth(1) Out[5]: a b c 0 -0.334077 0.002118 1 0.036142 -2.074978 2 -0.720589 0.887163 3 0.859588 -0.636524 新行为: In [36]: df.groupby("c", sort=True).nth(1) Out[36]: a b c 2 -0.720589 0.887163 2 3 0.859588 -0.636524 3 7 -0.334077 0.002118 0 21 0.036142 -2.074978 1 [4 rows x 3 columns] In [37]: df.groupby("c", sort=False).nth(1) Out[37]: a b c 2 -0.720589 0.887163 2 3 0.859588 -0.636524 3 7 -0.334077 0.002118 0 21 0.036142 -2.074978 1 [4 rows x 3 columns] NumPy 函数兼容性# 通过增强方法的签名,大大提高了pandas 类数组方法(例如sum和take)与其对应方法之间的兼容性,以便接受可以从 传入的参数,即使它们不一定在实现中使用(GH 12644 , GH 12638 , GH 12687 )numpypandasnumpypandas .searchsorted()forIndex现在TimedeltaIndex接受一个sorter参数以保持与 numpysearchsorted函数的兼容性(GH 12238) ( GH 12600 )np.round()上的numpy 兼容性错误Series 下面说明了此签名增强的示例: sp = pd.SparseDataFrame([1, 2, 3]) sp 以前的行为: In [2]: np.cumsum(sp, axis=0) ... TypeError: cumsum() takes at most 2 arguments (4 given) 新行为: np.cumsum(sp, axis=0) 用于.applyGroupBy 重采样# 使用apply重采样 groupby 操作(使用 a )现在与其他 groupby 操作上的pd.TimeGrouper类似调用具有相同的输出类型。 apply(GH 11742)。 In [38]: df = pd.DataFrame( ....: {"date": pd.to_datetime(["10/10/2000", "11/10/2000"]), "value": [10, 13]} ....: ) ....: In [39]: df Out[39]: date value 0 2000-10-10 10 1 2000-11-10 13 [2 rows x 2 columns] 以前的行为: In [1]: df.groupby(pd.TimeGrouper(key='date', ...: freq='M')).apply(lambda x: x.value.sum()) Out[1]: ... TypeError: cannot concatenate a non-NDFrame object # Output is a Series In [2]: df.groupby(pd.TimeGrouper(key='date', ...: freq='M')).apply(lambda x: x[['value']].sum()) Out[2]: date 2000-10-31 value 10 2000-11-30 value 13 dtype: int64 新行为: # Output is a Series In [55]: df.groupby(pd.TimeGrouper(key='date', ...: freq='M')).apply(lambda x: x.value.sum()) Out[55]: date 2000-10-31 10 2000-11-30 13 Freq: M, dtype: int64 # Output is a DataFrame In [56]: df.groupby(pd.TimeGrouper(key='date', ...: freq='M')).apply(lambda x: x[['value']].sum()) Out[56]: value date 2000-10-31 10 2000-11-30 13 read_csv例外情况的变化# 为了标准化和引擎 read_csv的 API ,两者现在都将引发, 的子类,以响应空列或标题(GH 12493、GH 12506)cpythonEmptyDataErrorValueError 以前的行为: In [1]: import io In [2]: df = pd.read_csv(io.StringIO(''), engine='c') ... ValueError: No columns to parse from file In [3]: df = pd.read_csv(io.StringIO(''), engine='python') ... StopIteration 新行为: In [1]: df = pd.read_csv(io.StringIO(''), engine='c') ... pandas.io.common.EmptyDataError: No columns to parse from file In [2]: df = pd.read_csv(io.StringIO(''), engine='python') ... pandas.io.common.EmptyDataError: No columns to parse from file 除了此错误更改之外,还进行了其他一些更改: CParserError现在是子类,ValueError而不仅仅是Exception(GH 12551) 当引擎无法解析列时,现在会引发ACParserError而不是泛型( GH 12506)Exceptionread_csvc 当引擎遇到整数列中的值时,现在会引发AValueError而不是泛型( GH 12506)Exceptionread_csvcNaN 现在,当指定时,会引发 A 而不是泛型,并且引擎在ValueError包含不可编码字节的列中遇到元素 ( GH 12506 )Exceptionread_csvtrue_valuesc pandas.parser.OverflowError异常已被删除并已替换为 Python 的内置OverflowError异常 ( GH 12506 ) pd.read_csv()不再允许参数使用字符串和整数的组合usecols(GH 12678) 方法to_datetime错误改变# pd.to_datetime()传递unit带有可转换条目和errors='coerce'/或不可转换条目的a 时出现错误errors='ignore'。此外,OutOfBoundsDateime当 时遇到该单位的超出范围的值时,将会引发异常errors='raise'。 (GH 11758、GH 13052、GH 13059) 以前的行为: In [27]: pd.to_datetime(1420043460, unit='s', errors='coerce') Out[27]: NaT In [28]: pd.to_datetime(11111111, unit='D', errors='ignore') OverflowError: Python int too large to convert to C long In [29]: pd.to_datetime(11111111, unit='D', errors='raise') OverflowError: Python int too large to convert to C long 新行为: In [2]: pd.to_datetime(1420043460, unit='s', errors='coerce') Out[2]: Timestamp('2014-12-31 16:31:00') In [3]: pd.to_datetime(11111111, unit='D', errors='ignore') Out[3]: 11111111 In [4]: pd.to_datetime(11111111, unit='D', errors='raise') OutOfBoundsDatetime: cannot convert input with unit 'D' 其他 API 更改# .swaplevel()for Series、DataFrame、Panel和MultiIndexnow 的前两个参数具有默认值i,并且j交换索引最内层的两个级别。 (GH 12934) .searchsorted()forIndex现在TimedeltaIndex接受一个sorter参数以保持与 numpysearchsorted函数的兼容性(GH 12238) Period现在PeriodIndex引发继承而不是原始的IncompatibleFrequency错误(GH 12615)ValueErrorValueError Series.apply对于类别 dtype 现在将传递的函数应用于每个.categories(而不是.codes),并在可能的情况下返回一个categorydtype ( GH 12473 ) read_csv现在将引发一个TypeErrorifparse_dates既不是布尔值、列表也不是字典(与文档字符串匹配)(GH 5636) 默认值为.query()/.eval()now ,如果已安装,engine=None则会使用它;numexpr否则它将回退到python引擎。如果安装了 numexpr,这会模仿 0.18.1 之前的行为numexpr(以前,如果未安装 numexpr,.query()/.eval()则会引发该行为)。 (GH 12749) pd.show_versions()现在包括pandas_datareader版本(GH 12740) 为通用函数提供适当的__name__属性( GH 12021)__qualname__ pd.concat(ignore_index=True)现在RangeIndex用作默认值(GH 12695) pd.merge()并在合并/加入单级数据帧和多级数据帧时DataFrame.join()显示( GH 9455,GH 12219)UserWarning 对于已弃用的插值方法,与scipy> 0.17兼容;piecewise_polynomial支持替换from_derivatives方法(GH 12887) 弃用# 该方法名称Index.sym_diff()已弃用,可以替换为Index.symmetric_difference()(GH 12591) 方法名称Categorical.sort()已弃用,取而代之的是Categorical.sort_values()(GH 12882) 性能改进# 提高 SAS 读卡器的速度(GH 12656、GH 12961) .groupby(..).cumcount()( GH 11039 )中的性能改进 pd.read_csv()改进了使用时的内存使用skiprows=an_integer(GH 13005) DataFrame.to_sql改进了检查表的大小写敏感性时的性能。现在仅当表名不是小写时检查表是否已正确创建。 (GH 12876) Period改进了构造和时间序列绘图的性能( GH 12903、GH 11831)。 改进的性能.str.encode()和.str.decode()方法(GH 13008) 改进了输入为数字数据类型时的性能to_numeric(GH 12777) IntIndex使用( GH 13036 )改进了稀疏算术的性能 Bug修复# usecolspd.read_csv即使 CSV 文件的行不均匀,现在也会考虑参数 in ( GH 12203 ) groupby.transform(..)当axis=1使用非单调有序索引指定时出现错误( GH 12713) 如果指定,则会引发错误Period和PeriodIndex创建。请注意,“分钟”频率在 v0.17.0 中已弃用,建议使用(GH 11854)KeyErrorfreq="Minute"freq="T" Bug.resample(...).count()总是PeriodIndex提高TypeError( GH 12774 ) 当空时(GH 12868).resample(...)进行铸造错误PeriodIndexDatetimeIndex 重新采样到现有频率时出现错误.resample(...)(GH 12770)PeriodIndex Period打印包含不同freq提升的数据中的错误ValueError(GH 12615) 指定了和 的Series构造错误( GH 12574)Categoricaldtype='category' 与强制 dtype 串联的错误过于激进,导致当对象长于display.max_rows(GH 12411、GH 12045、GH 11594、GH 10571、GH 12211)时,输出格式中出现不同的 dtypes 选项中的错误float_format,选项未验证为可调用。 (GH 12706) GroupBy.filter当dropna=False没有组满足标准时出现错误( GH 12768) __name__功能错误.cum*(GH 12021) .astype()从一个Float64Inde/Int64Index到一个的窃听Int64Index(GH 12881) .to_json()/.read_json()在何时orient='index'(默认)(GH 12866)中往返基于整数的索引时出现错误 Categorical尝试堆叠条形图时,绘制数据类型中的错误会导致错误( GH 13019) 与 >= numpy1.11 兼容以NaT进行比较(GH 12969) 使用.drop()非唯一的MultiIndex. (GH 12701) .concat日期时间 tz 感知和幼稚 DataFrame 的错误( GH 12467) 传递非字符串时正确引发ValueErrorin 的错误( GH 12952).resample(..).fillna(..) 修复了各种编码和标头处理问题pd.read_sas()(GH 12659、GH 12654、GH 12647、GH 12809) where中的错误pd.crosstab()会默默地忽略aggfuncif values=None( GH 12569 )。 DataFrame.to_json序列化时可能出现段错误datetime.time(GH 11473)。 DataFrame.to_json尝试序列化 0d 数组时可能出现段错误( GH 11299 )。 to_json尝试序列化 aDataFrame或Series与非 ndarray 值时出现段错误;现在支持category、sparse和dtypes 的序列化(GH 10778)。datetime64[ns, tz] 错误DataFrame.to_json在于不支持的数据类型未传递给默认处理程序(GH 12554)。 .align不返回子类的错误( GH 12983) Series将 a与 a对齐时出现错误DataFrame(GH 13037) 错误,ABCPanel其中Panel4D未被视为此泛型类型的有效实例(GH 12810) .name案例一致性错误.groupby(..).apply(..)(GH 12363) Timestamp.__repr__导致pprint嵌套结构失败的错误( GH 12622) Timedelta.min和中的错误Timedelta.max,属性现在报告timedeltaspandas 识别的真实最小值/最大值。请参阅文档。 (GH 12727) .quantile()插值中的错误可能会float意外强制(GH 12772) .quantile()空的错误Series可能会返回标量而不是空Series(GH 12772) .loc大型索引器中的越界错误会引发而IndexError不是KeyError(GH 12527) 使用 和 时重新采样的错误TimedeltaIndex,.asfreq()以前不会包括最终的栅栏柱(GH 12926) Categorical与a 中的相等测试中的错误DataFrame(GH 12564) 错误GroupBy.first(),使用.last()时返回不正确的行( GH 7453)TimeGrouper 在引用的项目中指定换行符时,引擎pd.read_csv()会出现错误(GH 10911,GH 12775)cskiprows DataFrame分配 tz 感知日期时间并对齐时丢失时区错误Series( GH 12981 ) 空值.value_counts()何时normalize=True何dropna=True地仍然对标准化计数产生影响的错误(GH 12558) Series.value_counts()如果其 dtype 为category(GH 12835),则错误会丢失名称 错误Series.value_counts()丢失时区信息(GH 12835) Series.value_counts(normalize=True)加注错误(GHCategorical 12835 )UnboundLocalError Panel.fillna()忽略错误inplace=True(GH 12633) 与引擎同时pd.read_csv()指定names、usecols和时出现错误( GH 9755 )parse_datesc 指定引擎并同时使用pd.read_csv()时出现错误(GH 12912)delim_whitespace=Truelineterminatorc 中的错误Series.rename,DataFrame.rename并且DataFrame.rename_axis不将其Series视为重新标记的映射(GH 12623)。 清理.rolling.min并.rolling.max增强数据类型处理(GH 12373) groupby复杂类型被强制浮动的错误( GH 12902) 如果其 dtype或 tz 感知,则会Series.map引发错误(GH 12473)TypeErrorcategorydatetime 32 位平台上的一些测试比较中的错误 ( GH 12972 ) 从构造中回退时索引强制的错误RangeIndex(GH 12893) 当传递无效参数(例如浮动窗口)时,窗口函数中出现更好的错误消息(GH 12669) DataFrame定义返回子类的切片子类中的错误Series可能会返回正常Series(GH 11559) 如果输入有并且结果是或(GH 12617),.str则访问器方法中的错误可能会出现ValueErrornameDataFrameMultiIndex DataFrame.last_valid_index()空框架中和空框架上的错误DataFrame.first_valid_index()(GH 12800) 错误CategoricalIndex.get_loc返回与常规结果不同的结果Index(GH 12531) PeriodIndex.resample名称未传播的错误( GH 12769) date_range closed关键字和时区中的错误( GH 12684)。 当输入数据包含 tz 感知的日期时间和 timedelta 时,会pd.concat引发错误( GH 12620)AttributeError 错误pd.concat没有Series正确处理空(GH 11082) 使用( GH 12979 )指定.plot.bar时出现对齐错误widthint fill_value如果二元运算符的参数是常量,则忽略错误( GH 12723) pd.read_html()使用 bs4 风格和带有标题且只有一列的解析表时出现错误( GH 9178 ) 空值.pivot_table何时margins=True何dropna=True地仍对保证金计数产生影响的错误(GH 12577) 表索引/列名称消失.pivot_table时出现错误( GH 12133)dropna=False pd.crosstab()何时margins=True以及哪个引发的错误dropna=False(GH 12642) Series.name当name属性可以是可散列类型时出现的错误( GH 12610) .describe()重置分类列信息中的错误( GH 11558) 调用时间序列loffset时未应用参数的错误( GH 12725)resample().count() pd.read_excel()现在接受与关键字参数关联的列名称names(GH 12870) 错误pd.to_numeric()与Index回报np.ndarray,而不是Index(GH 12777) pd.to_numeric()类似日期时间的错误可能会引发TypeError(GH 12777) pd.to_numeric()标量加注错误ValueError( GH 12777 ) 贡献者# 共有 60 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。 安德鲁·菲奥雷-加特兰 + 巴斯蒂安+ 伯努瓦·维诺 + 布兰登·罗德 + 达科克斯+ 德鲁·福斯汀 + 埃内斯托·弗雷塔斯 + 菲利普·特尔+ 格雷戈里·利夫希茨 + 加博·利普塔克 哈桑·基比里盖 + 林宜比利斯 以色列·萨埃塔·佩雷斯 + 贾森·沃洛索诺维奇 + 杰夫·雷巴克 乔·杰夫尼克 乔里斯·范登博什 约书亚·斯托克 + 陈嘉禾 克比谢登 基兰·奥马霍尼 莱夫·沃尔什 + 马哈茂德·拉巴比迪 + 刘茂源 + 马克·罗斯 + 马特·维特曼 最大U+ 马克西米利安·鲁斯 迈克尔·德鲁特布姆 + 尼克·尤班克 尼古拉斯·博诺特 氧化磷+ 保利·维尔塔宁 + 彼得·沃勒 + 彼得罗·巴蒂斯顿 普拉布约特·辛格 + 罗宾·威尔逊 罗杰·托马斯 + 塞巴斯蒂安银行 斯蒂芬·胡佛 蒂姆·霍珀 + 汤姆·奥格斯普格 王爱勇 韦斯·特纳 维南德+ 酒吧+ 严发才+ 阿德努+ ajenkins-cargometrics + 贝赫扎德·努里 钦斯基 + 格菲扬 杰普斯杂志 + 乔纳斯布+ 科特法+ 尼罗河船员 + 个和零 RS2+ 辛赫克斯 tsdlovell +