首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python代码在括号[ number ]值中转换数字值并返回非数字错误。

python代码在括号[ number ]值中转换数字值并返回非数字错误。
EN

Stack Overflow用户
提问于 2015-08-10 23:07:48
回答 1查看 412关注 0票数 2

我觉得我无法像通常那样正确地搜索这个元素,因为我不知道这个元素( n )变成了n。

我相信这是个小问题,但我不确定。

我输入了以下代码:

代码语言:javascript
复制
def get_quantile_count(group, q=0.5):
    group=group.sort_index(by='prop', ascending=False)
    return group.prop.cumsum().searchsorted(q) + 1
diversity= top1000.groupby(['year','sex']).apply(get_quantile_count)
diversity=diversity.unstack('sex')

top1000.head()返回:

代码语言:javascript
复制
       name sex  births  year      prop
year sex                                         
1880 F   0       Mary   F    7065  1880  0.077643
         1       Anna   F    2604  1880  0.028618
         2       Emma   F    2003  1880  0.022013
         3  Elizabeth   F    1939  1880  0.021309
         4     Minnie   F    1746  1880  0.019188

diversity.head()返回

代码语言:javascript
复制
sex      F     M
year            
1880  [38]  [14]
1881  [38]  [14]
1882  [38]  [15]
1883  [39]  [15]
1884  [39]  [16]

我相信,因为当我运行diversity.plot(title='stuff')时,这些值在括号中,所以我得到了错误:

代码语言:javascript
复制
TypeError: Empty 'DataFrame': no numeric data to plot

这些方括号从哪里爬进来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-10 23:30:36

这与searchsorted有关,您的函数get_quantile_countreturning时调用它。

它总是返回一份清单。请参阅文档中的这个示例:

X= pd.Series(1,2,3) >>> x 0 1 1 2 2 3 dtype: int64 >>> x.searchsorted(4)数组(3)

为了解决这个问题,您可以将函数的最后一行更改为:

代码语言:javascript
复制
return group.prop.cumsum().searchsorted(q)[0] + 1

或者,如果您出于某种原因不想编辑函数,可以使用applymap提取每个列表的第一个元素,该元素将任意函数应用于DataFrame的每个元素。

代码语言:javascript
复制
In []: df
Out[]: 
         F     M
year            
1880  [38]  [14]
1881  [38]  [14]
1882  [38]  [15]
1883  [39]  [15]
1884  [39]  [16]
In []: df.applymap(lambda x: x[0])
Out[]: 
       F   M
year        
1880  38  14
1881  38  14
1882  38  15
1883  39  15
1884  39  16
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31930607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档