版本 0.17.0(2015 年 10 月 9 日)#

这是 0.16.2 的主要版本,包括少量 API 更改、一些新功能、增强功能和性能改进以及大量错误修复。我们建议所有用户升级到此版本。

警告

pandas >= 0.17.0 将不再支持与 Python 版本 3.2 的兼容性(GH 9118

警告

该软件包已被弃用,并将由pandas-datareader 软件包pandas.io.data取代 。这将允许数据模块独立更新到您的 pandas 安装。 API与( GH 8961GH 10861 )中的 API 完全相同。pandas-datareader v0.1.1pandas v0.17.0

安装 pandas-datareader 后,您可以轻松更改导入:

from pandas.io import data, wb

变成

from pandas_datareader import data, wb

亮点包括:

  • 释放某些 cython 操作上的全局解释器锁 (GIL),请参阅此处

  • 绘图方法现在可用作.plot访问器的属性,请参见此处

  • 排序 API 已进行了改进,消除了一些长期不一致的问题,请参阅此处

  • 支持将datetime64[ns]时区作为一流的数据类型,请参见此处

  • to_datetime现在,raise当呈现不可解析的格式时,默认为to ,以前这将返回原始输入。此外,日期解析函数现在返回一致的结果。看这里

  • dropnain的默认值HDFStore已更改为False, 默认情况下存储所有行,即使它们是全部NaN,请参见此处

  • 日期时间访问器 ( dt) 现在支持Series.dt.strftime生成类似日期时间的格式化字符串,并Series.dt.total_seconds生成 timedelta 的每个持续时间(以秒为单位)。看这里

  • Period并且PeriodIndex可以处理倍增的频率,例如3D,对应于 3 天的跨度。看这里

  • pandas 的开发安装版本现在将具有PEP440兼容的版本字符串(GH 9518

  • 使用Air Speed Velocity 库( GH 8361 )进行基准测试的开发支持

  • 支持读取 SAS xport 文件,请参见此处

  • 比较 SAS 和pandas 的文档,请参阅此处

  • 删除自动 TimeSeries 广播,自 0.8.0 起已弃用,请参见此处

  • 纯文本的显示格式可以选择与 Unicode 东亚宽度对齐,请参阅此处

  • 与 Python 3.5 的兼容性(GH 11097

  • 与 matplotlib 1.5.0 的兼容性(GH 11111

更新前请检查API 更改弃用。

新功能

与 TZ 的日期时间#

我们正在添加一个原生支持带时区的日期时间的实现。以前 可以为ASeries或一列分配带有时区的日期时间,并且可以用作 dtype 。这在大量行时存在性能问题。请参阅文档了解更多详细信息。 (GH 8260GH 10763GH 11034)。DataFrameobject

新的实现允许跨所有行使用单一时区,并以高性能的方式进行操作。

In [1]: df = pd.DataFrame(
   ...:     {
   ...:         "A": pd.date_range("20130101", periods=3),
   ...:         "B": pd.date_range("20130101", periods=3, tz="US/Eastern"),
   ...:         "C": pd.date_range("20130101", periods=3, tz="CET"),
   ...:     }
   ...: )
   ...: 

In [2]: df
Out[2]: 
           A                         B                         C
0 2013-01-01 2013-01-01 00:00:00-05:00 2013-01-01 00:00:00+01:00
1 2013-01-02 2013-01-02 00:00:00-05:00 2013-01-02 00:00:00+01:00
2 2013-01-03 2013-01-03 00:00:00-05:00 2013-01-03 00:00:00+01:00

[3 rows x 3 columns]

In [3]: df.dtypes
Out[3]: 
A                datetime64[ns]
B    datetime64[ns, US/Eastern]
C           datetime64[ns, CET]
Length: 3, dtype: object
In [4]: df.B
Out[4]: 
0   2013-01-01 00:00:00-05:00
1   2013-01-02 00:00:00-05:00
2   2013-01-03 00:00:00-05:00
Name: B, Length: 3, dtype: datetime64[ns, US/Eastern]

In [5]: df.B.dt.tz_localize(None)
Out[5]: 
0   2013-01-01
1   2013-01-02
2   2013-01-03
Name: B, Length: 3, dtype: datetime64[ns]

这也使用了新的 dtype 表示,它在外观和感觉上与它的 numpy 表弟非常相似datetime64[ns]

In [6]: df["B"].dtype
Out[6]: datetime64[ns, US/Eastern]

In [7]: type(df["B"].dtype)
Out[7]: pandas.core.dtypes.dtypes.DatetimeTZDtype

笔记

DatetimeIndex由于数据类型更改,底层的字符串 repr 略有不同,但在功能上它们是相同的。

以前的行为:

In [1]: pd.date_range('20130101', periods=3, tz='US/Eastern')
Out[1]: DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
                       '2013-01-03 00:00:00-05:00'],
                      dtype='datetime64[ns]', freq='D', tz='US/Eastern')

In [2]: pd.date_range('20130101', periods=3, tz='US/Eastern').dtype
Out[2]: dtype('<M8[ns]')

新行为:

In [8]: pd.date_range("20130101", periods=3, tz="US/Eastern")
Out[8]: 
DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
               '2013-01-03 00:00:00-05:00'],
              dtype='datetime64[ns, US/Eastern]', freq='D')

In [9]: pd.date_range("20130101", periods=3, tz="US/Eastern").dtype
Out[9]: datetime64[ns, US/Eastern]

释放 GIL #

我们正在释放一些 cython 操作的全局解释器锁(GIL)。这将允许其他线程在计算期间同时运行,从而有可能提高多线程的性能。值得注意的是groupbynsmallestvalue_counts和一些索引操作受益于这一点。 ( GH 8882 )

df.groupby('key') 例如,以下代码中的 groupby 表达式将在分解步骤(例如以及操作)期间释放 GIL .sum()

N = 1000000
ngroups = 10
df = DataFrame(
    {"key": np.random.randint(0, ngroups, size=N), "data": np.random.randn(N)}
)
df.groupby("key")["data"].sum()

释放 GIL 可以使使用线程进行用户交互(例如QT)或执行多线程计算的应用程序受益。dask库是可以并行处理这些类型计算的库的一个很好的例子。

绘制子方法#

Series 和 DataFrame.plot()方法允许通过提供关键字参数来自定义绘图类型kind。不幸的是,许多此类绘图使用不同的必需和可选关键字参数,这使得很难从数十个可能的参数中发现任何给定绘图类型使用的内容。

为了缓解这个问题,我们添加了一个新的可选绘图接口,它将每种绘图公开为属性的方法.plot。您现在还可以使用:series.plot(kind=<kind>, ...)series.plot.<kind>(...)

In [10]: df = pd.DataFrame(np.random.rand(10, 2), columns=['a', 'b'])

In [11]: df.plot.bar()
../_images/whatsnew_plot_submethods.png

由于此更改,这些方法现在都可以通过制表符完成来发现:

In [12]: df.plot.<TAB>  # noqa: E225, E999
df.plot.area     df.plot.barh     df.plot.density  df.plot.hist     df.plot.line     df.plot.scatter
df.plot.bar      df.plot.box      df.plot.hexbin   df.plot.kde      df.plot.pie

每个方法签名仅包含相关参数。目前,这些仅限于必需参数,但将来它们也将包括可选参数。有关概述,请参阅新的绘图API 文档。

dt访问器的附加方法#

系列.dt.strftime #

我们现在支持一种Series.dt.strftime类似于日期时间的方法来生成格式化字符串(GH 10110)。例子:

# DatetimeIndex
In [13]: s = pd.Series(pd.date_range("20130101", periods=4))

In [14]: s
Out[14]: 
0   2013-01-01
1   2013-01-02
2   2013-01-03
3   2013-01-04
Length: 4, dtype: datetime64[ns]

In [15]: s.dt.strftime("%Y/%m/%d")
Out[15]: 
0    2013/01/01
1    2013/01/02
2    2013/01/03
3    2013/01/04
Length: 4, dtype: object
# PeriodIndex
In [16]: s = pd.Series(pd.period_range("20130101", periods=4))

In [17]: s
Out[17]: 
0    2013-01-01
1    2013-01-02
2    2013-01-03
3    2013-01-04
Length: 4, dtype: period[D]

In [18]: s.dt.strftime("%Y/%m/%d")
Out[18]: 
0    2013/01/01
1    2013/01/02
2    2013/01/03
3    2013/01/04
Length: 4, dtype: object

字符串格式与Python标准库相同,详细信息可以在这里找到

Series.dt.total_seconds #

pd.Series类型timedelta64有新方法.dt.total_seconds()返回 timedelta 的持续时间(以秒为单位)(GH 10817

# TimedeltaIndex
In [19]: s = pd.Series(pd.timedelta_range("1 minutes", periods=4))

In [20]: s
Out[20]: 
0   0 days 00:01:00
1   1 days 00:01:00
2   2 days 00:01:00
3   3 days 00:01:00
Length: 4, dtype: timedelta64[ns]

In [21]: s.dt.total_seconds()
Out[21]: 
0        60.0
1     86460.0
2    172860.0
3    259260.0
Length: 4, dtype: float64

周期频率增强#

PeriodPeriodIndex现在period_range可以接受倍频。另外,Period.freqPeriodIndex.freq现在存储为DateOffset实例,如DatetimeIndex, 而不是str( GH 7811 )

相乘的频率代表相应长度的跨度。下面的示例创建了 3 天的时间段。加法和减法会将周期移动其跨度。

In [22]: p = pd.Period("2015-08-01", freq="3D")

In [23]: p
Out[23]: Period('2015-08-01', '3D')

In [24]: p + 1
Out[24]: Period('2015-08-04', '3D')

In [25]: p - 2
Out[25]: Period('2015-07-26', '3D')

In [26]: p.to_timestamp()
Out[26]: Timestamp('2015-08-01 00:00:00')

In [27]: p.to_timestamp(how="E")
Out[27]: Timestamp('2015-08-03 23:59:59.999999999')

PeriodIndex您可以在和中使用相乘的频率period_range

In [28]: idx = pd.period_range("2015-08-01", periods=4, freq="2D")

In [29]: idx
Out[29]: PeriodIndex(['2015-08-01', '2015-08-03', '2015-08-05', '2015-08-07'], dtype='period[2D]')

In [30]: idx + 1
Out[30]: PeriodIndex(['2015-08-03', '2015-08-05', '2015-08-07', '2015-08-09'], dtype='period[2D]')

支持 SAS XPORT 文件#

read_sas()提供对读取SAS XPORT格式文件的支持。 (GH 4052)。

df = pd.read_sas("sas_xport.xpt")

还可以获取迭代器并增量读取 XPORT 文件。

for df in pd.read_sas("sas_xport.xpt", chunksize=10000):
    do_something(df)

请参阅文档了解更多详细信息。

支持 .eval() 中的数学函数#

eval()现在支持调用数学函数(GH 4893

df = pd.DataFrame({"a": np.random.randn(10)})
df.eval("b = sin(a)")

支持的数学函数有sin, cos, exp, log, expm1, log1p, sqrt, sinh, cosh, tanh, arcsin, arccos, arctan, arccosh, arcsinh, arctanh,absarctan2

这些函数映射到引擎的内在函数NumExpr。对于Python引擎,它们被映射到NumPy调用。

使用#更改 ExcelMultiIndex

在版本 0.16.2 中,无法通过 .a DataFramewithMultiIndex列将其写入 Excel to_excel。已添加该功能(GH 10564),并进行更新,以便通过指定组成 参数的read_excel列/行来读回数据,而不会丢失信息(GH 4679MultiIndexheaderindex_col

请参阅文档了解更多详细信息。

In [31]: df = pd.DataFrame(
   ....:     [[1, 2, 3, 4], [5, 6, 7, 8]],
   ....:     columns=pd.MultiIndex.from_product(
   ....:         [["foo", "bar"], ["a", "b"]], names=["col1", "col2"]
   ....:     ),
   ....:     index=pd.MultiIndex.from_product([["j"], ["l", "k"]], names=["i1", "i2"]),
   ....: )
   ....: 

In [32]: df
Out[32]: 
col1  foo    bar   
col2    a  b   a  b
i1 i2              
j  l    1  2   3  4
   k    5  6   7  8

[2 rows x 4 columns]

In [33]: df.to_excel("test.xlsx")

In [34]: df = pd.read_excel("test.xlsx", header=[0, 1], index_col=[0, 1])

In [35]: df
Out[35]: 
col1  foo    bar   
col2    a  b   a  b
i1 i2              
j  l    1  2   3  4
   k    5  6   7  8

[2 rows x 4 columns]

以前,如果序列化数据具有索引名称,则需要has_index_names在 中指定参数。read_excel对于版本 0.17.0, 的输出格式to_excel 已更改,使该关键字不再需要 - 更改如下所示。

老的

../_images/old-excel-index.png

新的

../_images/new-excel-index.png

警告

在 0.16.2 版本或更早版本中保存的具有索引名称的 Excel 文件仍然可以读入,但参数has_index_names必须指定为True.

Google BigQuery 增强功能#

  • pandas.io.gbq.to_gbq()如果目标表/数据集不存在,则添加了使用该函数自动创建表/数据集的功能。 (GH 8325GH 11121)。

  • pandas.io.gbq.to_gbq()添加了通过参数调用函数时替换现有表和架构的功能if_exists。有关更多详细信息,请参阅文档( GH 8325 )。

  • InvalidColumnOrder并且InvalidPageToken在 gbq 模块中将引发ValueError而不是IOError.

  • generate_bq_schema()功能现已弃用,并将在未来版本中删除(GH 11121

  • gbq 模块现在将支持 Python 3 ( GH 11094 )。

显示与 Unicode 东亚宽度对齐#

警告

DataFrame启用此选项将影响和的打印性能Series(大约慢 2 倍)。仅在实际需要时使用。

一些东亚国家使用Unicode字符,其宽度相当于2个字母。如果 aDataFrameSeries包含这些字符,则默认输出无法正确对齐。添加以下选项以实现对这些字符的精确处理。

  • display.unicode.east_asian_width:是否使用Unicode东亚宽度来计算显示文本宽度。 (GH 2612

  • display.unicode.ambiguous_as_wide:是否处理属于Ambigously 的Unicode 字符为Wide。 (GH 11102

In [36]: df = pd.DataFrame({u"国籍": ["UK", u"日本"], u"名前": ["Alice", u"しのぶ"]})

In [37]: df
Out[37]: 
   国籍     名前
0  UK  Alice
1  日本    しのぶ

[2 rows x 2 columns]
In [38]: pd.set_option("display.unicode.east_asian_width", True)

In [39]: df
Out[39]: 
   国籍    名前
0    UK   Alice
1  日本  しのぶ

[2 rows x 2 columns]

欲了解更多详情,请参阅此处

其他增强功能#

  • 支持openpyxl>= 2.2。样式支持的 API 现已稳定(GH 10125

  • merge现在接受参数indicator,该参数将分类类型列(默认称为_merge)添加到采用值的输出对象(GH 8790

    观察原点

    _merge价值

    'left'仅在框架中合并关键点

    left_only

    'right'仅在框架中合并关键点

    right_only

    合并两个帧中的关键点

    both

    In [40]: df1 = pd.DataFrame({"col1": [0, 1], "col_left": ["a", "b"]})
    
    In [41]: df2 = pd.DataFrame({"col1": [1, 2, 2], "col_right": [2, 2, 2]})
    
    In [42]: pd.merge(df1, df2, on="col1", how="outer", indicator=True)
    Out[42]: 
       col1 col_left  col_right      _merge
    0     0        a        NaN   left_only
    1     1        b        2.0        both
    2     2      NaN        2.0  right_only
    3     2      NaN        2.0  right_only
    
    [4 rows x 4 columns]
    

    有关更多信息,请参阅更新的文档

  • pd.to_numeric是一个新函数,用于将字符串强制转换为数字(可能带有强制)(GH 11133

  • pd.merge如果未合并,现在将允许重复的列名称(GH 10639)。

  • pd.pivot现在允许将索引传递为NoneGH 3962)。

  • pd.concat现在将使用现有的系列名称(如果提供)(GH 10698)。

    In [43]: foo = pd.Series([1, 2], name="foo")
    
    In [44]: bar = pd.Series([1, 2])
    
    In [45]: baz = pd.Series([4, 5])
    

    以前的行为:

    In [1]: pd.concat([foo, bar, baz], axis=1)
    Out[1]:
          0  1  2
       0  1  1  4
       1  2  2  5
    

    新行为:

    In [46]: pd.concat([foo, bar, baz], axis=1)
    Out[46]: 
       foo  0  1
    0    1  1  4
    1    2  2  5
    
    [2 rows x 3 columns]
    
  • DataFrame已获得nlargestnsmallest方法(GH 10393

  • 添加一个关键字参数,用于limit_direction向前、向后或两者都填充值( GH 9218GH 10420GH 11115limitinterpolateNaN

    In [47]: ser = pd.Series([np.nan, np.nan, 5, np.nan, np.nan, np.nan, 13])
    
    In [48]: ser.interpolate(limit=1, limit_direction="both")
    Out[48]: 
    0     NaN
    1     5.0
    2     5.0
    3     7.0
    4     NaN
    5    11.0
    6    13.0
    Length: 7, dtype: float64
    
  • 添加了一种DataFrame.round将值四舍五入到可变小数位数的方法(GH 10568)。

    In [49]: df = pd.DataFrame(
       ....:     np.random.random([3, 3]),
       ....:     columns=["A", "B", "C"],
       ....:     index=["first", "second", "third"],
       ....: )
       ....: 
    
    In [50]: df
    Out[50]: 
                   A         B         C
    first   0.126970  0.966718  0.260476
    second  0.897237  0.376750  0.336222
    third   0.451376  0.840255  0.123102
    
    [3 rows x 3 columns]
    
    In [51]: df.round(2)
    Out[51]: 
               A     B     C
    first   0.13  0.97  0.26
    second  0.90  0.38  0.34
    third   0.45  0.84  0.12
    
    [3 rows x 3 columns]
    
    In [52]: df.round({"A": 0, "C": 2})
    Out[52]: 
              A         B     C
    first   0.0  0.966718  0.26
    second  1.0  0.376750  0.34
    third   0.0  0.840255  0.12
    
    [3 rows x 3 columns]
    
  • drop_duplicates现在duplicated接受一个keep关键字来定位第一个、最后一个和所有重复项。该take_last关键字已弃用,请参阅此处GH 6511GH 8505

    In [53]: s = pd.Series(["A", "B", "C", "A", "B", "D"])
    
    In [54]: s.drop_duplicates()
    Out[54]: 
    0    A
    1    B
    2    C
    5    D
    Length: 4, dtype: object
    
    In [55]: s.drop_duplicates(keep="last")
    Out[55]: 
    2    C
    3    A
    4    B
    5    D
    Length: 4, dtype: object
    
    In [56]: s.drop_duplicates(keep=False)
    Out[56]: 
    2    C
    5    D
    Length: 2, dtype: object
    
  • 重新索引现在有一个tolerance参数,允许在重新索引时更好地控制填充限制GH 10411):

    In [57]: df = pd.DataFrame({"x": range(5), "t": pd.date_range("2000-01-01", periods=5)})
    
    In [58]: df.reindex([0.1, 1.9, 3.5], method="nearest", tolerance=0.2)
    Out[58]: 
           x          t
    0.1  0.0 2000-01-01
    1.9  2.0 2000-01-03
    3.5  NaN        NaT
    
    [3 rows x 2 columns]
    

    当用于 aDatetimeIndexTimedeltaIndexPeriodIndex,如果可能的话tolerance将被强制转换为 a Timedelta。这允许您使用字符串指定容差:

    In [59]: df = df.set_index("t")
    
    In [60]: df.reindex(pd.to_datetime(["1999-12-31"]), method="nearest", tolerance="1 day")
    Out[60]: 
                x
    1999-12-31  0
    
    [1 rows x 1 columns]
    

    tolerance也被较低层次Index.get_indexerIndex.get_loc方法暴露。

  • base添加了在重新采样时使用参数的功能TimeDeltaIndexGH 10530

  • DatetimeIndex可以使用字符串 contains NaT( GH 7599 )进行实例化

  • to_datetime现在可以接受yearfirst关键字(GH 7599

  • pandas.tseries.offsets大于Day偏移量现在可以与 a 一起用于Series加法/减法 ( GH 10699 )。请参阅文档了解更多详细信息。

  • pd.Timedelta.total_seconds()现在将 Timedelta 持续时间返回到 ns 精度(之前为微秒精度)(GH 10939

  • PeriodIndex现在支持算术np.ndarrayGH 10638

  • 支持物体酸洗PeriodGH 10439

  • .as_blocks现在将采用copy可选参数来返回数据的副本,默认为复制(与之前版本的行为没有变化),(GH 9607

  • regex现在的参数DataFrame.filter处理数字列名称而不是提升ValueErrorGH 10384)。

  • 通过显式设置压缩参数或根据响应中是否存在 HTTP Content-Encoding 标头来推断,启用通过 URL 读取 gzip 压缩文件 ( GH 8685 )

  • 启用使用 StringIO/BytesIO ( GH 7074 )在内存中写入 Excel 文件

  • 启用列表和字典到字符串的序列化ExcelWriterGH 8188

  • SQL io 函数现在接受 SQLAlchemy 可连接。 (GH 7877

  • pd.read_sql并且to_sql可以接受数据库 URI 作为con参数(GH 10214

  • read_sql_table现在将允许从视图中读取(GH 10750)。

  • HDFStores使用table格式 ( GH 10447 )时启用写入复数值

  • 当 HDF 文件包含单个数据集 ( GH 10443 )pd.read_hdf时,无需指定密钥即可使用

  • pd.read_stata现在将读取 Stata 118 类型文件。 (GH 9882

  • msgpack子模块已更新至 0.4.6,具有向后兼容性(GH 10581

  • DataFrame.to_dict现在接受orient='index'关键字参数(GH 10844)。

  • DataFrame.applyreduce=True如果传递的函数返回一个字典并且(GH 8735),将返回一系列字典。

  • 允许传递kwargs到插值方法(GH 10378)。

  • 改进了连接空的可迭代Dataframe对象时的错误消息(GH 9157

  • pd.read_csv现在可以增量读取 bz2 压缩文件,并且 C 解析器可以从 AWS S3 读取 bz2 压缩文件(GH 11070GH 11072)。

  • 在 中pd.read_csv,将 URL 识别s3n://s3a://指定 S3 文件存储(GH 11070GH 11071)。

  • 从 AWS S3 增量读取 CSV 文件,而不是首先下载整个文件。 (Python 2 中的压缩文件仍需要完整文件下载。)(GH 11070GH 11073

  • pd.read_csv现在能够推断从 AWS S3 存储读取的文件的压缩类型(GH 11070GH 11074)。

向后不兼容的 API 更改#

排序 API 的更改#

排序 API 长期以来存在一些不一致的情况。 (GH 9816GH 8239)。

以下是0.17.0之前的API 的摘要:

  • Series.sort返回一个新对象时为INPLACE 。DataFrame.sort

  • Series.order返回一个新对象

  • 可以通过传递关键字Series/DataFrame.sort_index来按by排序。

  • Series/DataFrame.sortlevel仅适用于MultiIndex按索引排序。

为了解决这些问题,我们改进了 API:

  • 我们引入了一种新方法 ,它是、、 和DataFrame.sort_values()的合并,用于处理的排序。DataFrame.sort()Series.sort()Series.order()

  • 现有方法Series.sort()Series.order()DataFrame.sort()已被弃用,并将在未来版本中删除。

  • by的参数已DataFrame.sort_index()被弃用,并将在未来版本中删除。

  • 现有方法.sort_index()将获取level关键字来启用级别排序。

我们现在有两种不同且不重叠的排序方法。 A*标记将显示 的项目FutureWarning

排序:

以前的

替代品

*Series.order()

Series.sort_values()

*Series.sort()

Series.sort_values(inplace=True)

*DataFrame.sort(columns=...)

DataFrame.sort_values(by=...)

索引排序:

以前的

替代品

Series.sort_index()

Series.sort_index()

Series.sortlevel(level=...)

Series.sort_index(level=...

DataFrame.sort_index()

DataFrame.sort_index()

DataFrame.sortlevel(level=...)

DataFrame.sort_index(level=...)

*DataFrame.sort()

DataFrame.sort_index()

我们还在两个类似 Series 的类Index和中弃用并更改了类似的方法Categorical

以前的

替代品

*Index.order()

Index.sort_values()

*Categorical.order()

Categorical.sort_values()

to_datetime 和 to_timedelta 的更改#

错误处理#

错误处理的默认值pd.to_datetime已更改为errors='raise'.在之前的版本中是errors='ignore'.此外,该coerce论点已被弃用,取而代之的是errors='coerce'.这意味着无效的解析将引发,而不是像以前的版本一样返回原始输入。 (GH 10636

以前的行为:

In [2]: pd.to_datetime(['2009-07-31', 'asd'])
Out[2]: array(['2009-07-31', 'asd'], dtype=object)

新行为:

In [3]: pd.to_datetime(['2009-07-31', 'asd'])
ValueError: Unknown string format

当然你也可以强制这样做。

In [61]: pd.to_datetime(["2009-07-31", "asd"], errors="coerce")
Out[61]: DatetimeIndex(['2009-07-31', 'NaT'], dtype='datetime64[ns]', freq=None)

要保持以前的行为,您可以使用errors='ignore'

In [4]: pd.to_datetime(["2009-07-31", "asd"], errors="ignore")
Out[4]: Index(['2009-07-31', 'asd'], dtype='object')

此外,pd.to_timedelta已经获得了类似的 API of errors='raise'|'ignore'|'coerce',并且该coerce关键字已被弃用,取而代之的是errors='coerce'

一致解析#

to_datetimeTimestamp和的字符串解析DatetimeIndex已保持一致。 (GH 7599

在 v0.17.0 之前,Timestamp可能to_datetime会使用今天的日期错误地解析仅限年份的日期时间字符串,否则DatetimeIndex 使用年初。Timestamp并且to_datetime可能会引发ValueError某些类型的可以解析的日期时间字符串DatetimeIndex ,例如季度字符串。

以前的行为:

In [1]: pd.Timestamp('2012Q2')
Traceback
   ...
ValueError: Unable to parse 2012Q2

# Results in today's date.
In [2]: pd.Timestamp('2014')
Out [2]: 2014-08-12 00:00:00

v0.17.0 可以如下解析它们。它也有效DatetimeIndex

新行为:

In [62]: pd.Timestamp("2012Q2")
Out[62]: Timestamp('2012-04-01 00:00:00')

In [63]: pd.Timestamp("2014")
Out[63]: Timestamp('2014-01-01 00:00:00')

In [64]: pd.DatetimeIndex(["2012Q2", "2014"])
Out[64]: DatetimeIndex(['2012-04-01', '2014-01-01'], dtype='datetime64[ns]', freq=None)

笔记

如果您想根据今天的日期执行计算,请使用Timestamp.now()pandas.tseries.offsets

In [65]: import pandas.tseries.offsets as offsets

In [66]: pd.Timestamp.now()
Out[66]: Timestamp('2024-04-10 17:55:56.541543')

In [67]: pd.Timestamp.now() + offsets.DateOffset(years=1)
Out[67]: Timestamp('2025-04-10 17:55:56.542277')

索引比较的变化#

等于的运算符的Index行为应类似于SeriesGH 9947GH 10637

从 v0.17.0 开始,比较Index不同长度的对象将引发ValueError.这是为了与 的行为保持一致Series

以前的行为:

In [2]: pd.Index([1, 2, 3]) == pd.Index([1, 4, 5])
Out[2]: array([ True, False, False], dtype=bool)

In [3]: pd.Index([1, 2, 3]) == pd.Index([2])
Out[3]: array([False,  True, False], dtype=bool)

In [4]: pd.Index([1, 2, 3]) == pd.Index([1, 2])
Out[4]: False

新行为:

In [8]: pd.Index([1, 2, 3]) == pd.Index([1, 4, 5])
Out[8]: array([ True, False, False], dtype=bool)

In [9]: pd.Index([1, 2, 3]) == pd.Index([2])
ValueError: Lengths must match to compare

In [10]: pd.Index([1, 2, 3]) == pd.Index([1, 2])
ValueError: Lengths must match to compare

numpy请注意,这与可以广播比较的行为不同:

In [68]: np.array([1, 2, 3]) == np.array([1])
Out[68]: array([ True, False, False])

或者如果无法进行广播则返回 False:

In [11]: np.array([1, 2, 3]) == np.array([1, 2])
Out[11]: False

布尔比较与无比较的变化#

Seriesvs的布尔比较None现在相当于与 比较np.nan,而不是 raise TypeError。 (GH 1079)。

In [69]: s = pd.Series(range(3), dtype="float")

In [70]: s.iloc[1] = None

In [71]: s
Out[71]: 
0    0.0
1    NaN
2    2.0
Length: 3, dtype: float64

以前的行为:

In [5]: s == None
TypeError: Could not compare <type 'NoneType'> type with Series

新行为:

In [72]: s == None
Out[72]: 
0    False
1    False
2    False
Length: 3, dtype: bool

通常您只想知道哪些值为空。

In [73]: s.isnull()
Out[73]: 
0    False
1     True
2    False
Length: 3, dtype: bool

警告

您通常会想要使用isnull/notnull这些类型的比较,因为它isnull/notnull会告诉您哪些元素为空。人们必须注意,nan's不是比较平等,而是None's平等。请注意,pandas/numpy 使用, 并将其视为。np.nan != np.nanNonenp.nan

In [74]: None == None
Out[74]: True

In [75]: np.nan == np.nan
Out[75]: False

HDFStore dropna 行为#

HDFStore 写入函数的默认行为format='table'现在是保留全部丢失的行。以前,行为是删除所有丢失的行来保存索引。可以使用该选项复制以前的行为dropna=True。 (GH 9382

以前的行为:

In [76]: df_with_missing = pd.DataFrame(
   ....:     {"col1": [0, np.nan, 2], "col2": [1, np.nan, np.nan]}
   ....: )
   ....: 

In [77]: df_with_missing
Out[77]: 
   col1  col2
0   0.0   1.0
1   NaN   NaN
2   2.0   NaN

[3 rows x 2 columns]
In [27]:
df_with_missing.to_hdf('file.h5',
                       key='df_with_missing',
                       format='table',
                       mode='w')

In [28]: pd.read_hdf('file.h5', 'df_with_missing')

Out [28]:
      col1  col2
  0     0     1
  2     2   NaN

新行为:

In [78]: df_with_missing.to_hdf("file.h5", key="df_with_missing", format="table", mode="w")

In [79]: pd.read_hdf("file.h5", "df_with_missing")
Out[79]: 
   col1  col2
0   0.0   1.0
1   NaN   NaN
2   2.0   NaN

[3 rows x 2 columns]

请参阅文档了解更多详细信息。

更改display.precision选项#

display.precision选项已澄清为引用小数位(GH 10451)。

pandas 的早期版本会将浮点数格式化为比 中的值少一位小数 display.precision

In [1]: pd.set_option('display.precision', 2)

In [2]: pd.DataFrame({'x': [123.456789]})
Out[2]:
       x
0  123.5

如果将精度解释为“有效数字”,这确实适用于科学记数法,但相同的解释不适用于具有标准格式的值。这也与 numpy 处理格式的方式不一致。

接下来, 的值display.precision将直接控制小数点后的位数,用于常规格式以及科学记数法,类似于 numpy 的precisionprint 选项的工作原理。

In [80]: pd.set_option("display.precision", 2)

In [81]: pd.DataFrame({"x": [123.456789]})
Out[81]: 
        x
0  123.46

[1 rows x 1 columns]

为了保留先前版本的输出行为,默认值display.precision已减少为6 from 7

更改为Categorical.unique#

Categorical.unique现在返回新的Categoricals和是唯一的,而不是返回categories(GH 10508codesnp.array

  • 无序类别:值和类别按出现顺序排序。

  • 有序类别:值按出现顺序排序,类别保持现有顺序。

In [82]: cat = pd.Categorical(["C", "A", "B", "C"], categories=["A", "B", "C"], ordered=True)

In [83]: cat
Out[83]: 
['C', 'A', 'B', 'C']
Categories (3, object): ['A' < 'B' < 'C']

In [84]: cat.unique()
Out[84]: 
['C', 'A', 'B']
Categories (3, object): ['A' < 'B' < 'C']

In [85]: cat = pd.Categorical(["C", "A", "B", "C"], categories=["A", "B", "C"])

In [86]: cat
Out[86]: 
['C', 'A', 'B', 'C']
Categories (3, object): ['A', 'B', 'C']

In [87]: cat.unique()
Out[87]: 
['C', 'A', 'B']
Categories (3, object): ['A', 'B', 'C']

更改为在解析器中bool传递#header

在 pandas 的早期版本中,如果将 bool 传递给,header的参数 ,或者将其隐式转换为整数,则会产生for和for ( GH 6113 )read_csvread_excelread_htmlheader=0Falseheader=1True

bool现在的输入将header引发TypeError

In [29]: df = pd.read_csv('data.csv', header=False)
TypeError: Passing a bool to header is invalid. Use header=None for no header or
header=int or list-like of ints to specify the row(s) making up the column names

其他 API 更改#

  • 线图和 kde 图subplots=True现在使用默认颜色,而不是全黑色。指定color='k'以黑色绘制所有线条(GH 9894

  • .value_counts()现在,在具有 dtype 的 Series 上调用该方法会返回带有( GH 10704 )categorical的 SeriesCategoricalIndex

  • pandas 对象子类的元数据属性现在将被序列化(GH 10553)。

  • groupby使用遵循与上述Categorical相同的规则( GH 10508Categorical.unique

  • DataFrame以前使用 dtype 数组构建时complex64意味着相应的列会自动提升为complex128dtype。 pandas 现在将保留复杂数据输入的项目大小(GH 10952

  • 一些数字归约运算符会返回ValueError,而不是TypeError包含字符串和数字的对象类型(GH 11131

  • 将当前不受支持的chunksize参数传递给read_excelExcelFile.parse现在将引发NotImplementedErrorGH 8011

  • 允许ExcelFile将对象传递到read_excelGH 11198

  • DatetimeIndex.union不推断输入freq是否为(GH 11086selfNonefreq

  • NaT的方法现在要么 raise ValueError,要么 returnnp.nanNaT( GH 9513 )

    行为

    方法

    返回np.nan

    weekday,isoweekday

    返回NaT

    date, now, replace, to_datetime,today

    返回np.datetime64('NaT')

    to_datetime64(不变)

    增加ValueError

    所有其他公共方法(名称不以下划线开头)

弃用#

  • 对于Series以下索引函数已弃用(GH 10177)。

    已弃用的函数

    替代品

    .irow(i)

    .iloc[i]或者.iat[i]

    .iget(i)

    .iloc[i]或者.iat[i]

    .iget_value(i)

    .iloc[i]或者.iat[i]

  • 对于DataFrame以下索引函数已弃用(GH 10177)。

    已弃用的函数

    替代品

    .irow(i)

    .iloc[i]

    .iget_value(i, j)

    .iloc[i, j]或者.iat[i, j]

    .icol(j)

    .iloc[:, j]

笔记

自 0.11.0 起,这些索引函数已在文档中弃用。

  • Categorical.name已被弃用以使其Categorical更像numpy.ndarray。请改用(GH 10482)。Series(cat, name="whatever")

  • Categorical在a中设置缺失值 (NaN)categories将发出警告 ( GH 10748 )。您仍然可以在 中包含缺失值values

  • drop_duplicatesandduplicatedtake_last关键字已被弃用,取而代之的是keep. (GH 6511GH 8505

  • Series.nsmallestandnlargesttake_last关键字已被弃用,取而代之的是keep. (GH 10792

  • DataFrame.combineAddDataFrame.combineMult已弃用。它们可以通过使用add和方法轻松替换mul: 和 ( GH 10735 )。DataFrame.add(other, fill_value=0)DataFrame.mul(other, fill_value=1.)

  • TimeSeries已弃用Series(请注意,自 0.13.0 起这一直是别名),( GH 10890 )

  • SparsePanel已弃用并将在未来版本中删除(GH 11157)。

  • Series.is_time_series已弃用,取而代之的是Series.index.is_all_datesGH 11135

  • 旧的偏移量(如'A@JAN')已被弃用(请注意,自 0.8.0 起这已成为别名)(GH 10878

  • WidePanel已弃用,支持Panel,LongPanel支持DataFrame(请注意,自 < 0.11.0 起这些一直是别名),( GH 10892 )

  • DataFrame.convert_objects已被弃用,取而代之的是特定于类型的函数pd.to_datetimepd.to_timestamppd.to_numeric0.17.0 中的新功能)(GH 11133)。

删除先前版本的弃用/更改#

  • 从和中删除na_last参数,以支持。 (GH 5231Series.order()Series.sort()na_position

  • 删除percentile_widthfrom .describe(),赞成percentiles。 (GH 7088

  • 从 0.8.0 版本左右删除colSpace参数DataFrame.to_string(),以支持col_space

  • 删除自动时间序列广播(GH 2304

    In [88]: np.random.seed(1234)
    
    In [89]: df = pd.DataFrame(
       ....:     np.random.randn(5, 2),
       ....:     columns=list("AB"),
       ....:     index=pd.date_range("2013-01-01", periods=5),
       ....: )
       ....: 
    
    In [90]: df
    Out[90]: 
                       A         B
    2013-01-01  0.471435 -1.190976
    2013-01-02  1.432707 -0.312652
    2013-01-03 -0.720589  0.887163
    2013-01-04  0.859588 -0.636524
    2013-01-05  0.015696 -2.242685
    
    [5 rows x 2 columns]
    

    之前

    In [3]: df + df.A
    FutureWarning: TimeSeries broadcasting along DataFrame index by default is deprecated.
    Please use DataFrame.<op> to explicitly broadcast arithmetic operations along the index
    
    Out[3]:
                        A         B
    2013-01-01  0.942870 -0.719541
    2013-01-02  2.865414  1.120055
    2013-01-03 -1.441177  0.166574
    2013-01-04  1.719177  0.223065
    2013-01-05  0.031393 -2.226989
    

    当前的

    In [91]: df.add(df.A, axis="index")
    Out[91]: 
                       A         B
    2013-01-01  0.942870 -0.719541
    2013-01-02  2.865414  1.120055
    2013-01-03 -1.441177  0.166574
    2013-01-04  1.719177  0.223065
    2013-01-05  0.031393 -2.226989
    
    [5 rows x 2 columns]
    
  • 删除table关键字 in HDFStore.put/append,赞成使用format=( GH 4645 )

  • 未使用时将其移除kind( read_excel/ExcelFileGH 4712 )

  • 删除未使用的infer_type关键字( GH 4770GH 7032pd.read_html

  • 删除offsettimeRule关键字Series.tshift/shift,支持freq( GH 4853 , GH 4864 )

  • 删除pd.load/pd.save别名以支持pd.to_pickle/pd.read_pickleGH 3787

性能改进#

  • 使用Air Speed Velocity 库( GH 8361 )进行基准测试的开发支持

  • 添加了替代 ExcelWriter 引擎和读取 Excel 文件的 vbench 基准测试 ( GH 7171 )

  • Categorical.value_counts( GH 10804 )中的性能改进

  • SeriesGroupBy.nuniqueSeriesGroupBy.value_counts的性能改进SeriesGroupby.transformGH 10820GH 11077

  • 整数数据类型的性能改进DataFrame.drop_duplicatesGH 10917

  • DataFrame.duplicated宽框架的性能改进。 (GH 10161GH 11180

  • timedelta字符串解析提高 4 倍( GH 6755GH 10426

  • timedelta64操作和操作提高 8 倍datetime64( GH 6755 )

  • 显着提高了切片器索引的性能MultiIndexGH 10287

  • iloc使用类似列表的输入性能提高 8 倍( GH 10791 )

  • Series.isin改进了datetimelike/integer Series ( GH 10287 )的性能

  • concat当类别相同时,分类性能提高 20 倍( GH 10587 )

  • to_datetime改进了指定格式字符串为 ISO8601 ( GH 10178 )时的性能

  • Series.value_countsfloat 数据类型 ( GH 10821 )的 2 倍改进

  • infer_datetime_formatto_datetime日期组件没有 0 填充时启用( GH 11142

  • DataFrame从嵌套字典构造中从 0.16.1 回归( GH 11084 )

  • DateOffsetSeriesor DatetimeIndex( GH 10744GH 11205 )的加法/减法运算的性能改进

Bug修复

  • 由于溢出而导致.mean()on计算不正确的错误( GH 9442timedelta64[ns]

  • 旧版 numpies中的错误.isinGH 11232

  • DataFrame.to_html(index=False)渲染不必要的行中的错误nameGH 10344

  • DataFrame.to_latex()参数中的错误column_format无法通过(GH 9402

  • 使用( GH 10477 )DatetimeIndex进行本地化时出现错误NaT

  • Series.dt保留元数据的操作中的错误( GH 10477

  • NaT在无效构造中传递时的保留错误to_datetimeGH 10477

  • DataFrame.apply函数返回分类系列时出现错误。 (GH 9573

  • 错误to_datetime提供了无效的日期和格式(GH 10154

  • Index.drop_duplicates删除名称时出现错误( GH 10115

  • Series.quantile删除名称时出现错误( GH 10881

  • 在索引具有频率的pd.Series空值上设置值时出现错误。 SeriesGH 10193

  • pd.Series.interpolate错误的order关键字值无效。 (GH 10633

  • 当颜色名称由多个字符指定时会DataFrame.plot引发错误( GH 10387ValueError

  • Index元组混合列表的构造错误( GH 10697

  • DataFrame.reset_index索引包含NaT. (GH 10388

  • ExcelReader工作表为空时出现错误( GH 6403

  • BinGrouper.group_info返回值与基类不兼容的错误( GH 10914

  • 清除缓存DataFrame.pop和后续就地操作中的错误(GH 10912

  • 使用混合整数进行索引时的错误Index导致ImportError( GH 10610 )

  • 当索引有空值时出现错误Series.countGH 10946

  • 非规则频率酸洗中的错误DatetimeIndexGH 11002

  • 当框架具有对称形状时,导致DataFrame.where不遵守参数的错误。 axisGH 9736

  • Table.select_column未保留名称的错误( GH 10392

  • 错误在offsets.generate_range哪里start并且比(GH 9907end有更好的精度offset

  • pd.rolling_*输出Series.name中会丢失的错误( GH 10565

  • stack当索引或列不唯一时出现错误。 (GH 10417

  • Panel当轴具有 MultiIndex ( GH 10360 )时设置 a 时出现错误

  • 错误在USFederalHolidayCalendar哪里USMemorialDayUSMartinLutherKingJr不正确(GH 10278GH 9760

  • .sample()返回对象中的错误(如果设置)会产生不必要的错误SettingWithCopyWarningGH 10738

  • .sample()在进行位置处理之前,权重传递时未沿轴对齐的错误Series,如果权重索引未与采样对象对齐,则可能会导致问题。 (GH 10738

  • 回归已修复(GH 9311GH 6620GH 9345),其中 groupby 具有类似日期时间的转换为具有某些聚合器的浮点数(GH 10979

  • DataFrame.interpolateaxis=1inplace=True( GH 10395 )发生错误

  • io.sql.get_schema指定多个列作为主键时出现错误( GH 10385)。

  • groupby(sort=False)与类似日期时间的Categorical提升有关的错误ValueErrorGH 10505

  • 抛出groupby(axis=1)错误(GHfilter() 11041 )IndexError

  • test_categorical大尾数构建中的错误( GH 10425

  • 错误Series.shift且不DataFrame.shift支持分类数据(GH 9416

  • Series.map使用分类Series加注时出现错误AttributeErrorGH 10324

  • MultiIndex.get_level_values包含Categorical加薪的错误AttributeErrorGH 10460

  • 错误pd.get_dummiessparse=True返回SparseDataFrameGH 10531

  • 子类型中的错误Index(例如PeriodIndex)不返回自己的类型.drop.insert方法(GH 10620

  • 数组为空algos.outer_join_indexer时出现错误( GH 10618right

  • 错误filter(从 0.16.0 回归)以及transform在多个键上分组时的错误,其中之一是类似日期时间的(GH 10114

  • 错误to_datetimeto_timedelta导致Index名称丢失(GH 10875

  • 当存在仅包含 NaN 的列时len(DataFrame.groupby)导致的错误( GH 11016IndexError

  • 对空系列重新采样时导致段错误的错误(GH 10228

  • 错误DatetimeIndexPeriodIndex.value_counts从其结果中重置名称,但保留在结果的Index. (GH 10150

  • pd.eval使用numexpr引擎将 1 个元素 numpy 数组强制转换为标量时出现错误( GH 10546

  • 当列为 dtype 时pd.concat出现错误(GH 10177axis=0category

  • read_msgpack不总是检查输入类型的错误( GH 10369GH 10630

  • Bug in pd.read_csvwith kwargs index_col=False,或 (GH 10413GH 10467GH 10577index_col=['a', 'b']dtype

  • Series.from_csvkwarg中的错误header未设置Series.nameSeries.index.name( GH 10483 )

  • groupby.var导致小浮点值的方差不准确的错误( GH 10448

  • Y 标签中的错误Series.plot(kind='hist')不提供信息(GH 10485

  • read_csv使用生成类型的转换器时出现错误uint8GH 9266

  • Bug 导致时间序列线图和面积图内存泄漏 ( GH 9003 )

  • Panel当右侧为DataFrame( GH 11014 )时,沿长轴或短轴设置切片时出现错误

  • 当未实现操作符函数(例如)时返回None且不会引发的错误( GH 7692NotImplementedError.addPanel

  • 线条和 kde 图中的错误无法接受多种颜色subplots=TrueGH 9894

  • 当颜色名称由多个字符指定时会DataFrame.plot引发错误( GH 10387ValueError

  • with左右align两侧的错误可能会颠倒(GH 10665SeriesMultiIndex

  • joinwith左右两侧的错误MultiIndex可能会颠倒(GH 10741

  • 读取在(GH 10757read_stata中设置不同顺序的文件时出现错误columns

  • 当类别包含或时,错误Categorical可能无法正确表示(GH 10713tzPeriod

  • 错误Categorical.__iter__可能无法返回正确的datetime结果PeriodGH 10713

  • PeriodIndex在带有 a 的对象上使用 a 进行索引时出现错误PeriodIndex( GH 4125 )

  • 错误: read_csvEOFengine='c'之前有注释、空行等未正确处理(GH 10728GH 10548

  • 通过读取“famafrench”数据DataReader会导致 HTTP 404 错误,因为网站 URL 已更改(GH 10591)。

  • read_msgpack要解码的 DataFrame 具有重复列名称的错误( GH 9618

  • io.common.get_filepath_or_buffer如果存储桶还包含用户没有读取权限的密钥,则导致读取有效 S3 文件失败(GH 10604

  • datetime.date使用 python和 numpy对时间戳列进行矢量化设置时出现错误datetime64GH 10408GH 10412

  • 错误Index.take可能会添加不必要的freq属性(GH 10791

  • merge空的错误DataFrame可能会引发IndexErrorGH 10824

  • to_latex某些记录参数的意外关键字参数中的错误( GH 10888

  • DataFrame未捕获的大型索引中的错误IndexErrorGH 10645GH 10692

  • 如果文件仅包含标题行,则read_csv使用nrows或参数时会出现错误( GH 9535chunksize

  • category在存在替代编码的情况下,HDF5 中的类型序列化存在错误。 (GH 10366

  • pd.DataFrame使用字符串 dtype 构造空 DataFrame 时出现错误( GH 9428

  • pd.DataFrame.diffDataFrame 未合并时出现错误( GH 10907

  • 具有or dtypepd.unique的数组的错误意味着返回具有 object dtype 的数组而不是原始 dtype ( GH 9431 )datetime64timedelta64

  • Timedelta从 0 开始切片时引发错误的错误( GH 10583 )

  • 错误DatetimeIndex.take并且TimedeltaIndex.take可能不会IndexError针对无效索引提出错误(GH 10295

  • 错误Series([np.nan]).astype('M8[ms]'),现在返回Series([pd.NaT])GH 10747

  • 重置频率中的错误PeriodIndex.orderGH 10295

  • date_rangefreq除以纳米时出现错误endGH 10885

  • iloc允许使用负整数访问系列边界之外的内存的错误( GH 10779

  • read_msgpack不遵守编码的错误( GH 10581

  • iloc与包含适当负整数的列表一起使用时阻止访问第一个索引的错误( GH 10547GH 10779

  • 格式化程序中的错误TimedeltaIndex导致尝试使用使用DataFrame保存时出错(GH 10833TimedeltaIndexto_csv

  • 处理系列切片时出现错误DataFrame.whereGH 10218GH 9558

  • 当 Bigquery 返回零行时pd.read_gbq抛出错误( GH 10273 )ValueError

  • to_json序列化 0 阶 ndarray 时导致分段错误的错误( GH 9576 )

  • IndexError绘制时可能会出现绘图函数中的错误GridSpecGH 10819

  • 绘图结果中的错误可能会显示不必要的小刻度标签(GH 10657

  • groupby聚合计算错误(例如DataFrame, , )。 (GH 10590GH 11010NaTfirstlastmin

  • 构造错误时DataFrame传递仅包含标量值的字典并指定列不会引发错误(GH 10856

  • .var()导致高度相似值的舍入错误的错误( GH 10242

  • 重复列中的错误输出DataFrame.plot(subplots=True)不正确的结果(GH 10962

  • 算术错误Index可能会导致错误的类(GH 10638

  • date_range如果每年、每季度和每月的频率为负,则结果为空的错误( GH 11018

  • 错误DatetimeIndex无法推断负频率(GH 11018

  • 删除一些已弃用的 numpy 比较操作的使用,主要是在测试中。 (GH 10569

  • dtype中的错误Index可能无法正确应用(GH 11017

  • io.gbq测试最低 google api 客户端版本时出现错误( GH 10652 )

  • 嵌套键DataFrame的构造错误(GH 11129dicttimedelta

  • .fillna当数据包含日期时间数据类型时,可能会引发错误TypeErrorGH 7095GH 11153

  • .groupby当分组的键数与索引长度相同时出现错误( GH 11185

  • 如果全部为 null 且( GH 9589 ),convert_objects则可能不会返回转换后的值的错误coerce

  • 不尊重关键字的convert_objects错误(GH 9589copy

贡献者#

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

  • 亚历克斯·罗斯伯格

  • 安德里亚·贝迪尼 +

  • 安德鲁·罗森菲尔德

  • 安迪·海登

  • 李安迪+

  • 安东尼奥斯·帕特尼乌 +

  • 阿特米·科尔钦斯基

  • 伯纳德·威勒斯

  • 查理·克拉克 +

  • 克里斯+

  • 克里斯·惠兰

  • 克里斯托夫·戈尔克 +

  • 克里斯托弗·惠兰

  • 克拉克·菲茨杰拉德

  • 克利尔菲尔德克里斯托弗+

  • 丹·林沃尔特 +

  • 倪丹尼尔+

  • 数据和代码专家在 Data + 上试验代码

  • 大卫·科特雷尔

  • 大卫·约翰·加涅 +

  • 大卫·凯利 +

  • ETF+

  • 爱德华多·谢蒂诺 +

  • 叶戈尔+

  • 叶戈尔·潘菲洛夫 +

  • 埃文·赖特

  • 弗兰克·品特 +

  • 加布里埃尔·阿劳霍 +

  • 加勒特-R

  • 吉安卢卡·罗西 +

  • 纪尧姆·盖伊

  • 纪尧姆·普兰

  • 严酷的尼萨尔+

  • 伊恩·亨里克森 +

  • 伊恩·赫根 +

  • 贾德夫·德什潘德 +

  • 扬·鲁道夫 +

  • 扬·舒尔茨

  • 贾森·斯维尔斯 +

  • 杰夫·雷巴克

  • 乔纳斯·布尔 +

  • 乔里斯·范登博什

  • 乔里斯·万克沙弗 +

  • 乔什·利维·克莱默 +

  • 朱利安·丹茹

  • 陈嘉禾

  • 卡里·基霍 +

  • 凯尔西·乔达尔

  • 克比谢登

  • 凯文·谢泼德

  • 拉尔斯·布廷克

  • 莱夫·约翰逊 +

  • 路易斯·奥尔蒂斯 +

  • 苹果电脑+

  • 马特·甘博吉 +

  • 马特·萨瓦 +

  • 马修·吉尔伯特 +

  • 马克西米利安·鲁斯 +

  • 米开朗基罗·达戈斯蒂诺 +

  • 莫尔塔达·梅哈尔

  • 尼克·尤班克

  • 尼蓬·巴特拉

  • 翁德热·切尔蒂克

  • 菲利普·克劳德

  • 普拉塔普·瓦尔丹 +

  • 拉法尔·斯科拉辛斯基 +

  • 理查德·刘易斯 +

  • 里诺克·约翰逊 +

  • 罗布·利维

  • 罗伯特·吉塞克

  • 萨菲亚·阿卜杜拉 +

  • 塞缪尔·丹尼 +

  • 萨米特拉·沙哈普尔 +

  • 塞巴斯蒂安·波尔斯特尔 +

  • 塞巴斯蒂安·鲁伯特 +

  • 谢泼德,凯文+

  • 辛赫克斯

  • 小关林 +

  • 船长西博尔德

  • 斯宾塞·卡鲁丘 +

  • 史蒂芬·霍耶

  • 史蒂芬·胡佛 +

  • 斯蒂芬·帕斯科 +

  • 特里·桑特戈德斯 +

  • 托马斯·格兰杰

  • 提尔克·桑特戈德斯 +

  • 汤姆·奥格斯普格

  • 文森特·戴维斯 +

  • 冬花+

  • 雅罗斯拉夫·哈尔琴科

  • 唐渊 (Terry) +

  • 阿吉斯贝尔茨

  • 阿杰克+

  • 贝赫扎德·努里

  • 细胞4

  • 克里斯-B1 +

  • 赛鲁斯马赫 +

  • 达维多维奇 +

  • 加内戈+

  • 杰雷巴克

  • 司法管辖+

  • 幼虫+

  • 马克西米利安 +

  • 姆桑德+

  • 雷克恰帕西拉

  • 罗伯特克+

  • scls19fr

  • 塞思-p

  • 辛赫克斯

  • Spring圈+

  • 特里汤圆 +

  • 辛克格拉夫 +