'str'对象不能解释为groupby上的整数

时间:2018-06-26 21:46:35

标签: python pandas group-by scipy

有人可以解释为什么我在同时是数字数据类型的'day'和'value'上进行倾斜(倾斜)时为什么出现此错误。 下面是我的脚本:

import pandas as pd
from scipy.stats import linregress
y = pd.DataFrame({'entity':['a','a','b','b','b','c'],
                          'day':[1999,2004,2003,2007,2014, 2016],
                          'value':[2,5,3,2,7,8]})
mylist= ['a', 'b'] 
y1 = y.groupby('entity').apply(lambda x: x[x['entity'].isin(mylist)])

此行显示错误:

y1.apply(lambda v: linregress(v['day'], v['value']))

错误跟踪:

  
    

TypeError跟踪(最近的呼叫     持续)     /anaconda3/lib/python3.6/site-packages/pandas/core/indexes/multi.py在     get_value(自身,系列,键)         999尝试:     -> 1000返回libindex.get_value_at(s,k)1001,除了IndexError:

         pandas._libs.index.get_value_at()中的

pandas / _libs / index.pyx

         util.get_value_at()中的

pandas / _libs / src / util.pxd

         

TypeError:“ str”对象不能解释为整数

         

在处理上述异常期间,发生了另一个异常:

         

KeyError跟踪(最近的呼叫     最后)在()     ----> 1 y1.apply(lambda v:linregress(v ['day'],v ['value']))           2

  
     

KeyError :(“天”,“发生在索引实体上”)

2 个答案:

答案 0 :(得分:0)

更新,那么您需要这样做:

y1.groupby(level='entity').apply(lambda x: linregress(x['day'],x['value']))

输出:

entity
a                                                                 (0.6, -1197.3999999999999, 1.0, 0.0, 0.0)
b    (0.4032258064516129, -805.6774193548387, 0.8485552916276634, 0.35494576760559776, 0.25142673013096595)
dtype: object

我认为您所要做的就是这样做,不需要应用,只需将两个dataframe列传递给linregress

linregress(y1['day'],y1['value'])

输出:

LinregressResult(slope=0.29073482428115016, intercept=-579.2396166134187, rvalue=0.7502746874224853, pvalue=0.14406233411953523, stderr=0.1479110164470003)

答案 1 :(得分:0)

请注意documentation for linregress调用类似数组的类型。

类似数组的类型在这里表示可以强制为NumPy数组的任何数据结构。这包括Pandas系列(我们可以通过在其中一个调用np.array来显示这一点)。

因此,您可以直接在数据框列上调用linregress,而无需在此处申请。也就是说,您可以将代码的最后一行替换为

df = y[y['entity'].isin(mylist)]
linregress(df['day'], df['value'])

Pandas和Python数据生态系统中的许多库的优势在于它们可以很好地配合使用,并且它们array-oriented,这意味着它们已针对数组和其他大型可迭代数据结构(相对于标量)的操作进行了优化。值,因此在大多数情况下,它们的方法默认情况下采用那些数据结构,而无需您显式调用applymap和其他函数。

另一个注意事项:您看到的类型错误是Pandas内部的堆栈跟踪。最新的跟踪以及导致问题的直接原因位于底部。