版本 0.16.1(2015 年 5 月 11 日)#

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

亮点包括:

  • 支持 a CategoricalIndex,基于类别的索引,请参见此处

  • 关于如何为pandas做出贡献的新部分,请参见此处

  • 修订了“合并、连接和连接”文档,包括图形示例,以便更容易理解每​​个操作,请参见此处

  • sample从系列、数据帧和面板中抽取随机样本的新方法。看这里

  • 默认Index打印已更改为更统一的格式,请参阅此处

  • BusinessHour现在支持日期时间偏移,请参见此处

  • 进一步增强.str访问器以使字符串操作更容易,请参见此处

警告

在 pandas 0.17.0 中,子包pandas.io.data将被删除,取而代之的是可单独安装的包(GH 8961)。

增强功能#

分类索引#

我们引入了CategoricalIndex一种新型索引对象,它对于支持重复索引非常有用。这是一个围绕 a 的容器Categorical(在 v0.15.0 中引入),允许高效索引和存储具有大量重复元素的索引。在 0.16.1 之前,使用DataFrame/Seriesdtype设置 a 的索引category会将其转换为常规的基于对象的Index.

In [1]: df = pd.DataFrame({'A': np.arange(6),
   ...:                    'B': pd.Series(list('aabbca'))
   ...:                           .astype('category', categories=list('cab'))
   ...:                    })
   ...:

In [2]: df
Out[2]:
   A  B
0  0  a
1  1  a
2  2  b
3  3  b
4  4  c
5  5  a

In [3]: df.dtypes
Out[3]:
A       int64
B    category
dtype: object

In [4]: df.B.cat.categories
Out[4]: Index(['c', 'a', 'b'], dtype='object')

设置索引,将创建一个CategoricalIndex

In [5]: df2 = df.set_index('B')

In [6]: df2.index
Out[6]: CategoricalIndex(['a', 'a', 'b', 'b', 'c', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

索引的__getitem__/.iloc/.loc/.ix工作方式与具有重复项的索引类似。索引器必须位于该类别中,否则操作将会引发。

In [7]: df2.loc['a']
Out[7]:
   A
B
a  0
a  1
a  5

并保留了CategoricalIndex

In [8]: df2.loc['a'].index
Out[8]: CategoricalIndex(['a', 'a', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

排序将按照类别的顺序进行排序

In [9]: df2.sort_index()
Out[9]:
   A
B
c  4
a  0
a  1
a  5
b  2
b  3

对索引进行 groupby 操作也将保留索引性质

In [10]: df2.groupby(level=0).sum()
Out[10]:
   A
B
c  4
a  6
b  5

In [11]: df2.groupby(level=0).sum().index
Out[11]: CategoricalIndex(['c', 'a', 'b'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')

重新索引操作,将根据传递的索引器的类型返回结果索引,这意味着传递列表将返回普通的旧- Index;使用 a 进行索引Categorical将返回 a CategoricalIndex,根据 PASSED dtype 的类别进行索引Categorical。这允许人们任意索引这些,即使值不在类别中,类似于如何重新索引任何 pandas 索引。

In [12]: df2.reindex(['a', 'e'])
Out[12]:
     A
B
a  0.0
a  1.0
a  5.0
e  NaN

In [13]: df2.reindex(['a', 'e']).index
Out[13]: pd.Index(['a', 'a', 'a', 'e'], dtype='object', name='B')

In [14]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde')))
Out[14]:
     A
B
a  0.0
a  1.0
a  5.0
e  NaN

In [15]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde'))).index
Out[15]: pd.CategoricalIndex(['a', 'a', 'a', 'e'],
                             categories=['a', 'b', 'c', 'd', 'e'],
                             ordered=False, name='B',
                             dtype='category')

请参阅文档了解更多信息。 (GH 7629GH 10038GH 10039

样本

Series、DataFrames 和 Panels 现在有一个新方法:sample().该方法接受要返回的特定行数或列数,或者总行数或总列数的一部分。它还具有带或不带替换采样的选项、用于传递非均匀采样权重的列以及用于设置种子值以促进复制的选项。 (GH 2419

In [1]: example_series = pd.Series([0, 1, 2, 3, 4, 5])

# When no arguments are passed, returns 1
In [2]: example_series.sample()
Out[2]: 
3    3
Length: 1, dtype: int64

# One may specify either a number of rows:
In [3]: example_series.sample(n=3)
Out[3]: 
2    2
1    1
0    0
Length: 3, dtype: int64

# Or a fraction of the rows:
In [4]: example_series.sample(frac=0.5)
Out[4]: 
1    1
5    5
3    3
Length: 3, dtype: int64

# weights are accepted.
In [5]: example_weights = [0, 0, 0.2, 0.2, 0.2, 0.4]

In [6]: example_series.sample(n=3, weights=example_weights)
Out[6]: 
2    2
4    4
3    3
Length: 3, dtype: int64

# weights will also be normalized if they do not sum to one,
# and missing values will be treated as zeros.
In [7]: example_weights2 = [0.5, 0, 0, 0, None, np.nan]

In [8]: example_series.sample(n=1, weights=example_weights2)
Out[8]: 
0    0
Length: 1, dtype: int64

当应用于 DataFrame 时,可以传递列名称来指定从行采样时的采样权重。

In [9]: df = pd.DataFrame({"col1": [9, 8, 7, 6], "weight_column": [0.5, 0.4, 0.1, 0]})

In [10]: df.sample(n=3, weights="weight_column")
Out[10]: 
   col1  weight_column
0     9            0.5
1     8            0.4
2     7            0.1

[3 rows x 2 columns]

字符串方法增强#

从 v0.16.0 开始,以下增强功能使字符串操作更加简单,并且与标准 python 字符串操作更加一致。

  • 添加StringMethods.str访问器)到IndexGH 9068

    .str访问器现在可用于SeriesIndex

    In [11]: idx = pd.Index([" jack", "jill ", " jesse ", "frank"])
    
    In [12]: idx.str.strip()
    Out[12]: Index(['jack', 'jill', 'jesse', 'frank'], dtype='object')
    

    .str访问器的一种特殊情况Index是,如果字符串方法返回bool,则.str访问器将返回 anp.array而不是布尔值Index( GH 8875 )。这使得以下表达式能够自然地工作:

    In [13]: idx = pd.Index(["a1", "a2", "b1", "b2"])
    
    In [14]: s = pd.Series(range(4), index=idx)
    
    In [15]: s
    Out[15]: 
    a1    0
    a2    1
    b1    2
    b2    3
    Length: 4, dtype: int64
    
    In [16]: idx.str.startswith("a")
    Out[16]: array([ True,  True, False, False])
    
    In [17]: s[s.index.str.startswith("a")]
    Out[17]: 
    a1    0
    a2    1
    Length: 2, dtype: int64
    
  • 可通过访问器访问以下新方法.str,以将函数应用于每个值。 (GH 9766GH 9773GH 10031GH 10045GH 10052

    方法

    capitalize()

    swapcase()

    normalize()

    partition()

    rpartition()

    index()

    rindex()

    translate()

  • split现在需要expand关键字来指定是否扩展维度。return_type已弃用。 ( GH 9847 )

    In [18]: s = pd.Series(["a,b", "a,c", "b,c"])
    
    # return Series
    In [19]: s.str.split(",")
    Out[19]: 
    0    [a, b]
    1    [a, c]
    2    [b, c]
    Length: 3, dtype: object
    
    # return DataFrame
    In [20]: s.str.split(",", expand=True)
    Out[20]: 
       0  1
    0  a  b
    1  a  c
    2  b  c
    
    [3 rows x 2 columns]
    
    In [21]: idx = pd.Index(["a,b", "a,c", "b,c"])
    
    # return Index
    In [22]: idx.str.split(",")
    Out[22]: Index([['a', 'b'], ['a', 'c'], ['b', 'c']], dtype='object')
    
    # return MultiIndex
    In [23]: idx.str.split(",", expand=True)
    Out[23]: 
    MultiIndex([('a', 'b'),
                ('a', 'c'),
                ('b', 'c')],
               )
    
  • 改进extractget_dummies方法Index.strGH 9980

其他增强功能#

  • BusinessHourBusinessDay现在支持 offset,默认表示营业时间为 09:00 - 17:00 。请参阅此处了解详细信息。 (GH 7905

    In [24]: pd.Timestamp("2014-08-01 09:00") + pd.tseries.offsets.BusinessHour()
    Out[24]: Timestamp('2014-08-01 10:00:00')
    
    In [25]: pd.Timestamp("2014-08-01 07:00") + pd.tseries.offsets.BusinessHour()
    Out[25]: Timestamp('2014-08-01 10:00:00')
    
    In [26]: pd.Timestamp("2014-08-01 16:30") + pd.tseries.offsets.BusinessHour()
    Out[26]: Timestamp('2014-08-04 09:30:00')
    
  • DataFrame.diff现在采用一个axis参数来确定差分方向(GH 9727

  • 允许clipclip_lower、 和clip_upper接受类似数组的参数作为阈值(这是 0.11.0 的回归)。这些方法现在有一个axis参数,用于确定 Series 或 DataFrame 如何与阈值对齐。 (GH 6966

  • DataFrame.mask()现在Series.mask()支持与whereGH 8801)相同的关键字

  • drop函数现在可以接受errors关键字以抑制ValueError在目标数据中不存在任何标签时引发的问题。 (GH 6736

    In [27]: df = pd.DataFrame(np.random.randn(3, 3), columns=["A", "B", "C"])
    
    In [28]: df.drop(["A", "X"], axis=1, errors="ignore")
    Out[28]: 
              B         C
    0 -0.706771 -1.039575
    1 -0.424972  0.567020
    2 -1.087401 -0.673690
    
    [3 rows x 2 columns]
    
  • 添加对使用破折号分隔年份和季度的支持,例如 2014-Q1。 (GH 9688

  • 允许使用 dtype 转换值datetime64timedelta64使用astype(str)( GH 9757 )将值转换为字符串

  • get_dummies函数现在接受sparse关键字。如果设置为True,则返回DataFrame稀疏,例如SparseDataFrame。 ( GH 8823 )

  • Period现在接受datetime64作为值输入。 ( GH 9054 )

  • 当时间定义中缺少前导零时,允许 timedelta 字符串转换,即0:00:00vs 00:00:00。 ( GH 9570 )

  • 允许( GHPanel.shift 9890 )axis='items'

  • NotImplementedError如果现在尝试写入 Excel 文件而不是写入损坏的 Excel 文件,则会引发DataFrame问题MultiIndex。 (GH 9794

  • 允许Categorical.add_categories接受Seriesnp.array。 (GH 9927

  • str/dt/cat动态添加/删除访问器__dir__。 ( GH 9910 )

  • 添加normalizedt访问器方法。 (GH 10047

  • DataFrame现在Series具有_constructor_expanddim作为一种更高维度数据的可重写构造函数的属性。仅当确实需要时才应使用它,请参阅此处

  • pd.lib.infer_dtype现在'bytes'在适当的情况下以 Python 3 的形式返回。 (GH 10032

API 更改#

  • 当将 ax 传递给 时,kwarg 现在将默认为。结果是 xlabels 和 xticklabels 的可见性将不再改变。您必须自己对图中的右轴执行此操作或显式设置(但这会更改图中所有轴的可见性,而不仅仅是传入的轴!)。如果 pandas 自己创建子图(例如没有传入kwarg),则默认值仍然是并且应用可见性更改。df.plot( ..., ax=ax)sharexFalsesharex=Trueaxsharex=True

  • assign()现在按字母顺序插入新列。以前的顺序是任意的。 (GH 9777

  • 默认情况下,read_csv现在read_table将尝试根据文件扩展名推断压缩类型。设置compression=None恢复之前的行为(不解压)。 (GH 9770

弃用#

  • Series.str.splitreturn_type关键字已被删除,取而代之的是expand( GH 9847 )

索引表示#

及其子类的字符串表示Index现已统一。如果值很少,这些将显示单行;大量值的换行多行显示(但小于display.max_seq_items; 如果有很多项 (> display.max_seq_items) 将显示截断的显示(数据的头部和尾部)。 的格式MultiIndex保持不变(多行换行显示)显示宽度响应选项display.max_seq_items,默认为100。(GH 6482

以前的行为

In [2]: pd.Index(range(4), name='foo')
Out[2]: Int64Index([0, 1, 2, 3], dtype='int64')

In [3]: pd.Index(range(104), name='foo')
Out[3]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...], dtype='int64')

In [4]: pd.date_range('20130101', periods=4, name='foo', tz='US/Eastern')
Out[4]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00-05:00, ..., 2013-01-04 00:00:00-05:00]
Length: 4, Freq: D, Timezone: US/Eastern

In [5]: pd.date_range('20130101', periods=104, name='foo', tz='US/Eastern')
Out[5]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00-05:00, ..., 2013-04-14 00:00:00-04:00]
Length: 104, Freq: D, Timezone: US/Eastern

新行为

In [29]: pd.set_option("display.width", 80)

In [30]: pd.Index(range(4), name="foo")
Out[30]: RangeIndex(start=0, stop=4, step=1, name='foo')

In [31]: pd.Index(range(30), name="foo")
Out[31]: RangeIndex(start=0, stop=30, step=1, name='foo')

In [32]: pd.Index(range(104), name="foo")
Out[32]: RangeIndex(start=0, stop=104, step=1, name='foo')

In [33]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"], ordered=True, name="foobar")
Out[33]: CategoricalIndex(['a', 'bb', 'ccc', 'dddd'], categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')

In [34]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 10, ordered=True, name="foobar")
Out[34]: 
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
                  'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb',
                  'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
                  'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd',
                  'a', 'bb', 'ccc', 'dddd'],
                 categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')

In [35]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 100, ordered=True, name="foobar")
Out[35]: 
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
                  'bb',
                  ...
                  'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
                  'dddd'],
                 categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar', length=400)

In [36]: pd.date_range("20130101", periods=4, name="foo", tz="US/Eastern")
Out[36]: 
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', '2013-01-04 00:00:00-05:00'],
              dtype='datetime64[ns, US/Eastern]', name='foo', freq='D')

In [37]: pd.date_range("20130101", periods=25, freq="D")
Out[37]: 
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06', '2013-01-07', '2013-01-08',
               '2013-01-09', '2013-01-10', '2013-01-11', '2013-01-12',
               '2013-01-13', '2013-01-14', '2013-01-15', '2013-01-16',
               '2013-01-17', '2013-01-18', '2013-01-19', '2013-01-20',
               '2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24',
               '2013-01-25'],
              dtype='datetime64[ns]', freq='D')

In [38]: pd.date_range("20130101", periods=104, name="foo", tz="US/Eastern")
Out[38]: 
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', '2013-01-04 00:00:00-05:00',
               '2013-01-05 00:00:00-05:00', '2013-01-06 00:00:00-05:00',
               '2013-01-07 00:00:00-05:00', '2013-01-08 00:00:00-05:00',
               '2013-01-09 00:00:00-05:00', '2013-01-10 00:00:00-05:00',
               ...
               '2013-04-05 00:00:00-04:00', '2013-04-06 00:00:00-04:00',
               '2013-04-07 00:00:00-04:00', '2013-04-08 00:00:00-04:00',
               '2013-04-09 00:00:00-04:00', '2013-04-10 00:00:00-04:00',
               '2013-04-11 00:00:00-04:00', '2013-04-12 00:00:00-04:00',
               '2013-04-13 00:00:00-04:00', '2013-04-14 00:00:00-04:00'],
              dtype='datetime64[ns, US/Eastern]', name='foo', length=104, freq='D')

性能改进#

  • 改进了混合数据类型的 csv 写入性能,包括高达 5 倍的日期时间 ( GH 9940 )

  • csv 写入性能总体提高 2 倍 ( GH 9940 )

  • 性能提高pd.lib.max_len_string_array5-7 倍 ( GH 10024 )

Bug修复

  • 标签未正确显示在 图例中的错误DataFrame.plot(),传递label=参数有效,并且系列索引不再变异。 ( GH 9542 )

  • 当帧长度为零时,json 序列化中的错误会导致段错误。 ( GH 9805 )

  • read_csv缺少尾随定界符会导致段错误的错误。 (GH 5664

  • 附加时保留索引名称的错误(GH 9862

  • scatter_matrix绘制意外轴刻度标签中的错误( GH 5662

  • 修复了保存时StataWriter导致输入更改的错误( GH 9795)。DataFrame

  • transform当存在空条目并且使用快速聚合器时导致长度不匹配的错误( GH 9697

  • equals当块顺序不同时导致漏报的错误(GH 9330

  • 多个分组中的错误pd.Grouper,其中一个不基于时间(GH 10063

  • read_sql_table读取带有时区的 postgres 表时出现错误( GH 7139

  • 切片中的错误DataFrame可能不会保留元数据(GH 9776

  • TimdeltaIndex修复了未正确序列化的错误HDFStoreGH 9635

  • 当将另一个作为数据给出时,TimedeltaIndex构造函数会忽略错误(GH 10025)。nameTimedeltaIndex

  • 错误DataFrameFormatter._get_formatted_index未应用于max_colwidth索引DataFrameGH 7856

  • .loc只读 ndarray 数据源中的错误( GH 10043

  • groupby.apply()如果传递的用户定义函数仅返回None(对于所有输入),则会引发错误。 (GH 9685

  • 在 pytables 测试中始终使用临时文件(GH 9992

  • 连续使用绘图中的错误secondary_y可能无法正确显示图例。 (GH 9610GH 9779

  • 当包含非数字列时DataFrame.plot(kind="hist")结果中的错误( GH 9853TypeErrorDataFrame

  • 重复绘制DataFrame可能DatetimeIndex会引发的错误TypeErrorGH 9852

  • 该错误setup.py将允许构建不兼容的 cython 版本(GH 9827

  • 绘图中的错误secondary_y错误地将right_ax属性附加到递归指定自身的辅助轴。 (GH 9861

  • Series.quantile空系列类型DatetimeTimedelta( GH 9675 )上的错误

  • where需要向上转换时导致错误结果的错误( GH 9731 )

  • FloatArrayFormatter对于给定的显示精度,以十进制格式显示“小”浮点数的决策边界偏离一个数量级的错误( GH 9764

  • 修复了当传递和关键字并且样式字符串中没有颜色符号DataFrame.plot()时引发错误的错误( GH 9671colorstyle

  • 未显示将DeprecationWarning类似列表与Index( GH 10083 )结合起来的情况

  • 如果存在空行read_csv,则read_table在使用参数时会出现错误。 skip_rows( GH 9832 )

  • 错误read_csv()解释index_col=True1GH 9798

  • ==使用索引/多索引类型不兼容性失败的索引相等比较中的错误( GH 9785

  • SparseDataFrame无法nan作为列名称的错误( GH 8822

  • zlib 和 blosc 压缩支持to_msgpack中的错误( GH 9783read_msgpack

  • 如果按(GH 9925)分组,则错误GroupBy.size不会正确附加索引名称TimeGrouper

  • length_of_indexer由于返回错误结果而导致切片分配异常的错误( GH 9995

  • csv 解析器中的错误导致带有初始空格加一个非空格字符的行被跳过。 ( GH 9710 )

  • 当数据以换行符开头,后跟空格时,C csv 解析器中的错误会导致虚假 NaN。 (GH 10022

  • 当按 a 分组时,导致具有空组的元素溢出到最终组中的错误CategoricalGH 9603

  • 空数据帧上 .iloc 和 .loc 行为不一致的错误 ( GH 9964 )

  • 错误TimedeltaIndex引发的无效属性访问错误(GH 9680ValueErrorAttributeError

  • 分类数据和标量之间的不等比较中的错误,该标量不在类别中(例如。这返回所有元素,但现在引发。相等比较现在也返回for和for 。(GH 9848Series(Categorical(list("abc"), ordered=True)) > "d"FalseTypeErrorFalse==True!=

  • __setitem__当右侧是字典时DataFrame 中的错误( GH 9874

  • where当 dtype 为datetime64/timedelta64,但其他 dtype 不是时出现错误( GH 9804

  • MultiIndex.sortlevel()导致 unicode 级别名称中断的错误( GH 9856 )

  • 错误地groupby.transform强制输出数据类型与输入数据类型相匹配。 ( GH 9807 )

  • 设置参数DataFrame时构造函数中的错误,并且是一个空列表(GH 9939columnsdata

  • 如果所有值都小于 1,则条形图中的错误会log=True升高( GH 9905TypeError

  • 水平条形图中的错误忽略log=TrueGH 9905

  • PyTables 查询中的错误未使用索引返回正确的结果(GH 8265GH 9676

  • 将包含类型值的数据帧Decimal除以另一个数据帧Decimal会引发错误。 (GH 9787

  • 使用 DataFrames asfreq 会删除索引名称的错误。 ( GH 9885 )

  • 重新采样 BM/BQ 时导致额外索引点的错误 ( GH 9756 )

  • 将缓存更改AbstractHolidayCalendar为实例级别而不是类级别,因为后者可能会导致意外行为。 ( GH 9552 )

  • 修复了多索引数据帧的乳胶输出(GH 9778

  • DataFrame.loc使用(GH 9596)设置空范围时导致异常的错误

  • 将新绘图添加到现有轴网格时隐藏带有子图和共享轴的刻度标签的错误(GH 9158

  • 对分类变量进行分组时transform出现错误( GH 9921filter

  • transform当组的数量和数据类型与输入索引相同时出现错误( GH 9700

  • Google BigQuery 连接器现在基于每个方法导入依赖项。( GH 9713 )

  • 更新了 BigQuery 连接器,不再使用已弃用的oauth2client.tools.run()( GH 8327 )

  • 子类中的错误DataFrame。在对其进行切片或子集化时,它可能不会返回正确的类。 ( GH 9632 )

  • .median()未正确处理非浮点空值的错误( GH 10040

  • Series.fillna() 中的错误,如果给出可数字转换的字符串,则会引发该错误(GH 10092

贡献者#

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

  • 阿方索 MHC +

  • 安迪·海登

  • 阿特米·科尔钦斯基

  • 克里斯·吉尔默 +

  • 克里斯·格林诺兹 +

  • 丹·伯肯

  • 大卫·布罗查特 +

  • 大卫·赫希菲尔德 +

  • 大卫·斯蒂芬斯

  • 利奥博士+

  • 埃文·赖特 +

  • 弗朗斯·范·邓内 +

  • 哈特姆·纳斯拉特 +

  • 亨宁·斯佩尔 +

  • 雨果·赫特 +

  • 扬·舒尔茨

  • 杰夫·布莱克本 +

  • 杰夫·雷巴克

  • 吉姆·克里斯特+

  • 乔纳斯·阿伯诺特+

  • 乔里斯·范登博什

  • 克比谢登

  • 列奥·拉佐莫夫 +

  • 曼努埃尔·瑞尔 +

  • 莫尔塔达·梅哈尔

  • 尼克·伯恩斯 +

  • 尼克·尤班克 +

  • 奥利维尔·格里塞尔

  • 菲利普·克劳德

  • 彼得罗·巴蒂斯顿

  • 韩贤振

  • 张山 +

  • 斯科特·桑德森 +

  • 辛克斯+

  • 史蒂芬·霍耶

  • 蒂亚戈·安涛

  • 汤姆·阿贾米安 +

  • 汤姆·奥格斯普格

  • 托马兹·贝里萨 +

  • 维克拉姆·希尔古尔 +

  • 弗拉基米尔·菲利莫诺夫

  • 威廉·霍格曼 +

  • 亚辛A+

  • 金英根 +

  • 贝赫扎德·努里

  • dsm054

  • 弗洛伊德软件+

  • 飞羊+

  • 肾小球滤过率+

  • 克拉蒂

  • 杰雷巴克

  • 克桑海 +

  • 卢卡斯+

  • 姆施莫尔 +

  • p型+

  • 罗格

  • SCL19FR +

  • 辛赫克斯