Имена столбцов данных в массиве np имеют \ n после одного из имен столбцов - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь суммировать значения выбранных столбцов из списка столбцов и сохранить его в новом столбце. Тем не менее, я продолжаю получать

повышение KeyError ('% s не в индексе'% objarr [маска])

KeyError: "['a' 'b' 'c '' d '' e '\ n' f '] отсутствует в индексе "

Это фрагмент кода, в котором я пытаюсь добиться этого:

cols = df.columns.values
colIndex = np.argwhere('Person')
selectCols = np.delete(cols, colIndex)
df['total counts'] = df[selectCols].sum(axis=1)

Сначала Я не уверен, как \n присутствует после столбца e, и, во-вторых, я не знаю, что вызывает эту KeyError. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 13 марта 2020
In [290]: np.argwhere('Person')                                                                
Out[290]: array([], shape=(1, 0), dtype=int64)

Не имеет смысла использовать это в np.delete.

Показать cols

===

In [301]: cols = np.array(['Person', 'a', 'b', 'c', 'd', 'e', 'f'])                            
In [302]: idx = np.argwhere('Person')                                                          
In [303]: idx                                                                                  
Out[303]: array([], shape=(1, 0), dtype=int64)
In [304]: np.delete(cols, idx)                                                                 
Out[304]: array(['Person', 'a', 'b', 'c', 'd', 'e', 'f'], dtype='<U6')

в качестве альтернативы можно найти где cols равно 'Персоне':

In [305]: idx = np.argwhere(cols=='Person')                                                    
In [306]: idx                                                                                  
Out[306]: array([[0]])
In [307]: np.delete(cols, idx)                                                                 
Out[307]: array(['a', 'b', 'c', 'd', 'e', 'f'], dtype='<U6')

или работать с версией списка cols:

In [313]: alist = cols.tolist()                                                                                      
In [314]: alist                                                                                                      
Out[314]: ['Person', 'a', 'b', 'c', 'd', 'e', 'f']
In [315]: alist.remove('Person')                                                                                     
In [316]: alist                                                                                                      
Out[316]: ['a', 'b', 'c', 'd', 'e', 'f']

===

повторяя больше вашего дела:

In [317]: df = pd.DataFrame(np.ones((2,4),int), columns=['a','b','c','d'])                                           
In [318]: df                                                                                                         
Out[318]: 
   a  b  c  d
0  1  1  1  1
1  1  1  1  1
In [319]: cols = df.columns.values                                                                                   
In [320]: cols                                                                                                       
Out[320]: array(['a', 'b', 'c', 'd'], dtype=object)
In [322]: np.argwhere(cols=='a')                                                                                     
Out[322]: array([[0]])
In [323]: np.delete(cols, _)                                                                                         
Out[323]: array(['b', 'c', 'd'], dtype=object)
In [324]: df[_]                                                                                                      
Out[324]: 
   b  c  d
0  1  1  1
1  1  1  1
In [326]: df[_323].sum(axis=1)                                                                                       
Out[326]: 
0    3
1    3
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...