尝试用Pandas和Python绘图时的空系列

时间:2015-01-02 19:20:14

标签: python python-2.7 pandas

我正试图跟随Wes McKinney的this video tutorial。我已经到了我们要经历婴儿名字示例的地步,我在我写的代码和his code(BabyNames.ipynb)中遇到了同样的问题。

作为参考,我使用的是Mac(OS X 10.10.1):

  • Python 2.7.6
  • IPython 2.3.1
  • Pandas 0.15.2

我可以成功完成所有这些:

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,就会发生同样的事情。

2 个答案:

答案 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()