我正试图跟随Wes McKinney的this video tutorial。我已经到了我们要经历婴儿名字示例的地步,我在我写的代码和his code(BabyNames.ipynb)中遇到了同样的问题。
作为参考,我使用的是Mac(OS X 10.10.1):
我可以成功完成所有这些:
names = read_csv('baby-names2.csv') # read the data in
boys = names[names.sex == 'boy'] # create boys list
girls = names[names.sex == 'girl'] # create girls list
# create a function
def get_quantile_count(group, quantile=0.5):
df = group.sort_index(by='prop', ascending=False)
return df.prop.cumsum().searchsorted(quantile)
# call the function
boys.groupby('year').apply(get_quantile_count)
这给了我这样的输出(为简洁起见,只显示了一小部分数据):
year
1880 [15]
1881 [15]
1882 [17]
1883 [17]
1884 [19]
1885 [20]
1886 [20]
1887 [21]
1888 [22]
1889 [22]
1890 [23]
1891 [24]
1892 [25]
我想绘制这些数据,如下所示:
boys.groupby('year').apply(get_quantile_count).plot()
但它给了我这个错误:
TypeError: Empty 'Series': no numeric data to plot
在观看视频时,他显示的数据在数据框中的数字周围没有方括号[]。我猜这是造成我问题的原因。
任何人都有任何关于如何改变这个的技巧?我正在观看视频并自己编写代码,但是如果我运行提供的笔记本BabyNames.ipynb,就会发生同样的事情。
答案 0 :(得分:1)
所以我似乎太早发布了这个问题。我稍稍离开它然后意识到这是一个简单的解决方法。
问题是函数searchsorted()给了我一个数组,我只需要数组中的单项。很容易。修改了这个功能:
# create a function
def get_quantile_count(group, quantile=0.5):
df = group.sort_index(by='prop', ascending=False)
return df.prop.cumsum().searchsorted(quantile)[0]
只是使用索引0来获取数组中的数字。不知道为什么我这么难过。我想这个函数最近必须改变它的返回类型?或者我有一些选项设置错误?不知道,但至少这个解决了它。
答案 1 :(得分:1)
我遇到了类似的问题,使用.astype(float)
来解决问题,但您的方式可能更好。
boys.groupby('year').apply(get_quantile_count).astype(float).plot()