我正在使用“ 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
答案 0 :(得分:2)
我假设您正在使用Pandas> = 0.13.0
从这个版本开始,Pandas series
将numpy' ndframe
作为子类,而不再是ndarray
。 See 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) ^^^^^^^