Numpy的searchsorted()不能与Pandas一起使用

时间:2014-12-31 01:53:52

标签: python pandas

我正在使用“ Python for Data Analysis ”一书来学习数据科学。 在本书中,作者使用.searchsorted()中的numpy,但似乎它不适用于作者提供给我们的特定代码。

我有dataframe,我想在列表中找到具有特定数字的数字。

作者的代码是:

df = boys[boys.year == 2010]
prop_cumsum = df.sort_index(by='prop', ascending=False).prop.cumsum()
prop_cumsum.searchsorted(0.5)

但它提出错误说:

AttributeError: 'Series' object has no attribute 'searchsorted'

下面的代码有效但它也给了我不需要的数字:

np.searchsorted(prop_cumsum,0.5)

Out[13]: 
year  sex       
1900  M    54492    24
           54493    24
           54494    24
           54495    24
           54496    24
           54497    24
           54498    24
           54499    24
           54500    24
           54501    24
           54502    24
           54503    24
           54504    24
           54505    24
           54506    24
...
1900  M    55508    24
           55509    24
           55510    24
           55511    24
           55505    24
           55513    24
           55514    24
           55515    24
           55516    24
           55517    24
           55520    24
           55518    24
           55512    24
           55519    24
           55524    24
Name: prop, Length: 1000, dtype: int64

根据这本书,我应该期待一个输出:

In [399]: prop_cumsum.searchsorted(0.5) + 1
Out[399]: 25

1 个答案:

答案 0 :(得分:2)

我假设您正在使用Pandas> = 0.13.0

从这个版本开始,Pandas series将numpy' ndframe作为子类,而不再是ndarraySee here了解更多信息。

现在,您可以使用.values返回ndarray,您可以在其上发送searchsorted

df = boys[boys.year == 2010]
prop_cumsum = df.sort_index(by='prop', ascending=False).prop.values.cumsum()
prop_cumsum.searchsorted(0.5)                               ^^^^^^^