2016-08-09 5 views
1

У меня есть dataframe, который я конвертирую в массив (это testcenario, потому что у меня проблемы с результатами в пандах). Теперь я хочу подвести итог одному столбцу.Как суммировать столбец в numpy

У меня есть следующий код:

import sys 
import pandas as pd 
import numpy as np 
import os 
from tkinter import * 


#data_rbu = np.genfromtxt('tmp_fakt_daten.csv', delimiter=',', dtype=None) 
data_rbu = pd.read_excel('tmp_fakt_daten.xlsx') 
array_rbu = data_rbu.as_matrix() 
print(array_rbu) 
summe1 = np.sum(array_rbu, axis=9, dtype=float) 
print(summe1) 

Это массив! Я хочу подвести итоги KW_WERT и NETTO_EURO.

FAK_ART,FAK_DAT,LEIST_DAT,KD_CRM,MW_BW,EQ_NR,MATERIAL,KW_WERT,NETTO_EURO,TA 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.15,18.9,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.145,18.27,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.145,18.27,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.15,18.9,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.15,18.9,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.145,18.27,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,B,1001380363.0,B60ETS,0.15,18.9,SDH 
ZPAF,2015-12-10,2015-12-31,T-HOME ICP,E,1001380594.0,B60ETS,3.011,252.92,DSLAM/MSAN 

После выполнения кода я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:\Users\A52113242\Desktop\PROJEKTE\[INPROGRESS] Faktura_sylvia\csv_einlesen bzgl. float\test2.py", line 12, in <module> 
    summe1 = np.sum(array_rbu, axis=9, dtype=float) 
    File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\numpy\core\fromnumeric.py", line 1724, in sum 
    out=out, keepdims=keepdims) 
    File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\numpy\core\_methods.py", line 32, in _sum 
    return umr_sum(a, axis, dtype, out, keepdims) 
ValueError: 'axis' entry is out of bounds 

Я понимаю, что проблема номер оси .. но я не знаю, что им точно делать неправильно. Я проверил документацию на numpy.sum ...

Надеюсь, вы можете мне помочь!

Damian

+0

Хотя я прокомментировал свои мысли под @ JulienBernu отвечает, я предложит вам просто сделать это: 'np_arr = data_rbu [['KW_WERT', 'NETTO_EURO']]. values ​​# дает вам массив numpy только с нужными столбцами', затем 'numpy.sum (np_arr, axis = 0', и вы получите тот же ответ. Ниже приведены numpy docs на 'numpy.sum': http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html Проверьте примеры; 4-й и 5-й примеры. – Kartik

+0

Причина, по которой вы получаете ValueError, состоит в том, что у вас нет девятой оси. Ваша матрица 2D. Он имеет только строки и столбцы. Таким образом, он имеет 2 оси: 0 и 1. Если бы это была трехмерная матрица (строка, col и глубина), тогда она имела бы 3 оси: 0, 1, 2 ... и так далее. Вы поняли эту идею. Вы пытаетесь суммировать 9-й столбец, который отличается от 9-й оси. Вам нужно 'numpy.sum (array_rbu [:, 7])' для '' KW_WERT'' и 'numpy.sum (array_rbu [:, 8])' для ''NETTO_EURO'' ... Получите это? Кроме того, numpy индексируется 0, поэтому 9-й столбец является последним столбцом (TA), который является строкой и не может быть суммирован ... Рад помочь! – Kartik

ответ

1

Как вы сказали, что значения в массиве:

In[10]:arr 
Out[10]: 
array([['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.15, 18.9, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.145, 18.27, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.145, 18.27, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.15, 18.9, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.15, 18.9, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.145, 18.27, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'B', 
     1001380363.0, 'B60ETS', 0.15, 18.9, 'SDH'], 
     ['ZPAF', '2015-12-10', '2015-12-31', 'T-HOME ICP', 'E', 
     1001380594.0, 'B60ETS', 3.011, 252.92, 'DSLAM/MSAN']], dtype=object) 

вы можете сделать с помощью arr.sum:

sum_arr=arr.sum(axis=0) 

axis=0 будет подводить столбец мудрого, то вы можете получить доступ столбца, основанный на его index.In вашего случая для столбцов KW_WERT и NETTO_EURO вы можете получить сумму, как:

In[25]:sum_arr[7] 
Out[25]: 4.046 

In[26]:sum_rr[8] 
In[23]: 383.33 
1

сделать это прямо в панд:

data_rbu = pd.read_excel('tmp_fakt_daten.xlsx') 
summe1 = data_rbu['KW_WERT'] + data_rbu['NETTO_EURO'] # gets you a series 
summe1.sum() # gets you the total sum (if that's what you are after) 
+0

это пункт! Я сделал это уже в пандах, но я хочу также проверить результаты в numpy – Damian

+0

pandas и numpy в основном одинаковы для числовых значений: 'summe1.values' предоставит вам базовый' np.array'. (только то, как обрабатываются NaN или None, могут быть разными, если у вас есть ...) Вы можете выполнять все те же операции, используя '.values' всюду. Это просто уродливый ... – Julien

+0

Pandas использует numpy для большинства, если не всех, математических вычислений. Внутренне (и упрощенное изображение) числовые столбцы pandas представляют собой массивы numpy, а для них используются методы numpy. Таким образом, сравнение результата с 'pandas.DataFrame.sum' с' numpy.sum' похоже на сравнение одного и того же яблока с самим собой или просмотр двух копий одной и той же фотографии, а также поиск различий или просмотр себя в зеркало и проверка, чтобы увидеть, что все бородавки, родинки, веснушки и ямочки находятся в одном и том же месте ... Вид спорный, если вы спросите меня. – Kartik

Смежные вопросы