如何使用熊猫?

时间:2018-07-15 01:49:17

标签: python pandas dataframe

例如,我经常对熊猫切片操作感到困惑,

import pandas as pd
raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'], 
    'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'], 
    'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'], 
    'preTestScore': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3],
    'postTestScore': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'name', 'preTestScore', 'postTestScore'])

def get_stats(group):
    return {'min': group.min(), 'max': group.max(), 'count': group.count(), 'mean': group.mean()}
bins = [0, 25, 50, 75, 100]
group_names = ['Low', 'Okay', 'Good', 'Great']
df['categories'] = pd.cut(df['postTestScore'], bins, labels=group_names)
des = df['postTestScore'].groupby(df['categories']).apply(get_stats).unstack()
des.at['Good','mean']

然后我得到了

  

TypeError跟踪(最近的呼叫   最后)中的pandas / _libs / index.pyx   pandas._libs.index.IndexEngine.get_loc()

     

pandas / _libs / hashtable_class_helper.pxi在   pandas._libs.hashtable.Int64HashTable.get_item()

     

TypeError:必须为整数

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

  

KeyError跟踪(最近的呼叫   最后)在()   ----> 1个des.at ['Good','mean']

     

C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在    getitem ((自身,密钥))1867 1868密钥= self._convert_key(密钥)   -> 1869返回self.obj._get_value(* key,takeable = self._takeable)1870 1871 def setitem ((self,   键,值):

     

C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py在   _get_value(self,index,col,takeable)1983 1984尝试:   -> 1985返回engine.get_value(series._values,index)1986除了(TypeError,ValueError):1987

     pandas._libs.index.IndexEngine.get_value()中的

pandas / _libs / index.pyx

     pandas._libs.index.IndexEngine.get_value()中的

pandas / _libs / index.pyx

     pandas._libs.index.IndexEngine.get_loc()中的

pandas / _libs / index.pyx

     

KeyError:'好'

我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:0)

问题出在那行

des = df['postTestScore'].groupby(df['categories']).apply(get_stats).unstack()

在通过“ postTestScroe”进行分组之后,您将获得“系列” ,而不是“ DataFrame” ,如下所示。

enter image description here

现在,当您尝试使用DataFrame des “。at” 访问标量标签时,由于Series不存在标签,因此无法识别标签“ Good”。

des.at['Good','mean']   

只需尝试打印 des 打印,您将看到生成的系列。

           count   max   mean   min
categories
Low           2.0  25.0  25.00  25.0
Okay          0.0   NaN    NaN   NaN
Good          8.0  70.0  63.75  57.0
Great         2.0  94.0  94.00  94.0

答案 1 :(得分:0)

由于分类索引不起作用:

des.index
# Out[322]: CategoricalIndex(['Low', 'Okay', 'Good', 'Great'], categories=['Low', 'Okay', 'Good', 'Great'], ordered=True, name='categories', dtype='category')

尝试像这样更改它:

des.index = des.index.tolist()
des.at['Good','mean']
# Out[326]: 63.75