2016-08-09 54 views
1

Ich habe einen Datenrahmen, den ich in einem Array konvertieren (das ist ein Testszenario, weil ich Probleme mit den Ergebnissen in Pandas habe). Jetzt möchte ich eine Spalte zusammenfassen.Wie summiere ich eine Spalte in numpy

Ich habe den folgenden Code:

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) 

Dies ist das Array! Ich möchte KW_WERT und NETTO_EURO zusammenfassen.

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 

Nach der Ausführung des Codes erhalte ich diesen Fehler:

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 

Ich verstehe, dass das Problem der Achsnummer ist .. aber ich weiß nicht, was im genau falsch. Ich überprüfte die Dokumentation für numpy.sum ...

Ich hoffe, Sie können mir helfen!

Damian

+0

Obwohl ich meine Gedanken unter @ Antwort JulienBernu die kommentierte I würde vorschlagen, dass Sie einfach folgendes tun: 'np_arr = data_rbu [['KW_WERT', 'NETTO_EURO']]. values ​​# gibt Ihnen ein numpy Array mit nur den gewünschten Spalten, dann' numpy.sum (np_arr, axis = 0', und du wirst die gleiche Antwort bekommen. Hier sind einige Dokumente zu 'numpy.sum': http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html Überprüfen Sie die Beispiele; 4. und 5. Beispiele speziell. – Kartik

+0

Der Grund für den ValueError ist, dass Sie keine 9. Achse haben. Ihre Matrix ist 2D. Es hat nur Zeilen und Spalten. Es hat also 2 Achsen: 0 und 1. Wenn es eine 3D-Matrix wäre (Reihe, Spalte und Tiefe), dann hätte es 3 Achsen: 0, 1, 2 ... und so weiter. Du hast die Idee. Sie versuchen, die 9. Spalte zu summieren, die sich von der 9. Achse unterscheidet. Was Sie brauchen, ist 'numpy.sum (array_rbu [:, 7])' für ''KW_WERT'' und' numpy.sum (array_rbu [:, 8]) 'für'' NETTO_EURO'' ... Get it? Außerdem ist numpy 0 indiziert, also ist neunte Spalte die letzte Spalte (TA), die eine Zeichenkette ist und nicht summiert werden kann ... Schön zu helfen! – Kartik

Antwort

1

Wie Sie gesagt haben die Werte in Array:

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) 

Sie tun arr.sum verwenden, können:

sum_arr=arr.sum(axis=0) 

axis=0 es spaltenweise zusammenzufassen, dann können Sie den Spalt Zugriff basierend auf seinen index.In Ihren Fall für Spalten KW_WERT und NETTO_EURO Sie die Summe bekommen, wie:

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

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

tun es direkt in Pandas:

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

das ist der Punkt! Ich habe es schon in Pandas gemacht, aber ich möchte die Ergebnisse auch in numpy überprüfen. – Damian

+0

pandas und numpy sind im Grunde die gleichen für numerische Werte: 'summe1.values' gibt dir das zugrundeliegende' np.array'. (So ​​wie NaN's oder None's behandelt werden, können sie anders sein, wenn Sie welche haben ...) Sie können überall die gleichen Operationen mit '.values' durchführen. Es ist einfach hässlich ... – Julien

+0

Pandas verwendet numpy für die meisten, wenn nicht alle mathematischen Berechnungen. Intern (und ein vereinfachtes Bild) sind numerische pandas-Spalten numpy-Arrays und für sie werden numpy-Methoden verwendet. Also vergleicht man die Ausgabe von "pandas.DataFrame.sum" mit "numpy.sum" so, als ob man den gleichen Apfel mit sich selbst vergleicht oder zwei Kopien desselben Fotos anstarrt und versucht, Unterschiede zu erkennen oder sich selbst in der Spiegel und Überprüfung, um alle Warzen zu sehen, Mole, Sommersprossen und Grübchen sind an der gleichen Stelle ... Art von Streit, wenn Sie mich fragen. – Kartik