Hallo,
Angneommen ich habe ein CSV Tabelle:
Zuerst würde ich gerne, zum Beispiel, aus Zeile 3, Spalte 4 mit Spalte 5 addieren. Kann mir jemand sagen wie ich das anstellen würde?
Sorry, saß grad 2 Stunden hier rum und habe versucht das hin zu bekommen, aber langsam qualmt mir ein bisschen der Kopf und
ich resigniere vor dieser wahrscheinlich recht einfachen Aufgabe.
Kann mir bitte jemand helfen?
Newbie: CSV Tabelle einlesen und in Zeilen und Spalten splitten
Okay, also der code:
gibt folgende Fehlermeldung aus:mport pandas as pd
data = pd.read_csv('tabelle.csv')
summe = data[3,4] + data[3,5]
print(summe)
Ich hab keine Ahnung, was das alles bedeutetTraceback (most recent call last):
File "C:\Python37-32\lib\site-packages\pandas\core\indexes\base.py", line 3078, in get_loc
return self._engine.get_loc(key)
File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: (3, 4)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\ME\Desktop\pyBTCstrat\pyBTCstrat.py", line 5, in <module>
summe = data[3,4] + data[3,5]
File "C:\Python37-32\lib\site-packages\pandas\core\frame.py", line 2688, in __getitem__
return self._getitem_column(key)
File "C:\Python37-32\lib\site-packages\pandas\core\frame.py", line 2695, in _getitem_column
return self._get_item_cache(key)
File "C:\Python37-32\lib\site-packages\pandas\core\generic.py", line 2489, in _get_item_cache
values = self._data.get(item)
File "C:\Python37-32\lib\site-packages\pandas\core\internals.py", line 4115, in get
loc = self.items.get_loc(item)
File "C:\Python37-32\lib\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: (3, 4)
Da habe ich selbst noch ne Luecke, ich dachte pandas verhaelt sich da wie ein numpy array. Das laesst sich aber leicht beheben:
Code: Alles auswählen
import pandas as pd
import io
DATA = """foo,bar,baz
1,2,3
1,2,3
1,2,3
1,2,3"""
data = pd.read_csv(io.StringIO(DATA)).as_matrix()
print(data)
summe = data[1,2] + data[2,2]
print(summe)
Danke!__deets__ hat geschrieben: ↑Montag 20. August 2018, 19:53 Da habe ich selbst noch ne Luecke, ich dachte pandas verhaelt sich da wie ein numpy array. Das laesst sich aber leicht beheben:
Code: Alles auswählen
import pandas as pd import io DATA = """foo,bar,baz 1,2,3 1,2,3 1,2,3 1,2,3""" data = pd.read_csv(io.StringIO(DATA)).as_matrix() print(data) summe = data[1,2] + data[2,2] print(summe)
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei das IMHO fast ein ”Missbrauch” von Pandas ist, wenn man am Ende alles was Pandas-Dataframes ausmachen einfach weg wirft. Dann kann man das auch gleich nur mit `numpy` machen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Naja doch, man nimmt den Spaltennamen, bekommt dafür das `Series`-Objekt das die Spalte repräsentiert und greift da dann per Index auf die dritte Zeile zu:
Dein ursprünglicher Zugriff ``data[3, 4]`` würde sich auf einen Multi-Index für die Spalte beziehen. Oder Spalte*n* falls der Multi-Index mehr als zwei Ebenen hat.
Code: Alles auswählen
summe = data[3][2] + data[4][2]
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Also so wie du die eine Zeile Code da hingeschrieben hast geht es fuer mich genau nicht. Das habe ich ja als erstes probiert, nachdem die Komma-basierte Syntax versagt hat.
Was dann geklappt hat ist
summe = data.baz[2] + data.foo[0]
Mir war so als ob ich data["foo"] vergeblich probiert habe, aber gerade gesehen: das geht, was auch immer ich da verbockt habe.
Alles in allem ist das ok, aber ganz ehrlich: das ein namensbezogener Zugriff dem per Index so unbedingt vorzuziehen ist, sehe ich jetzt nicht.
Was dann geklappt hat ist
summe = data.baz[2] + data.foo[0]
Mir war so als ob ich data["foo"] vergeblich probiert habe, aber gerade gesehen: das geht, was auch immer ich da verbockt habe.
Alles in allem ist das ok, aber ganz ehrlich: das ein namensbezogener Zugriff dem per Index so unbedingt vorzuziehen ist, sehe ich jetzt nicht.
@__deets__: Du hast doch eine Tabelle, in der jede Spalte einen Namen hat. Da ist es ganz natürlich, dass man die Spalte auch per Namen anspricht.
MuMPiTz scheint keinen Header zu haben, da sind dann die „Spaltennamen” Nummern, der Zugriff über Index funktioniert also wie erwartet:
MuMPiTz scheint keinen Header zu haben, da sind dann die „Spaltennamen” Nummern, der Zugriff über Index funktioniert also wie erwartet:
Code: Alles auswählen
data = pd.read_csv(io.StringIO(DATA), header=None)
summe = data[3][2] + data[4][2]
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: Du hast ja auch durch die Kopfzeile andere Spaltennamen. Also ich finde sprechende Namen anstelle von magischen Indexzahlen schon besser. Zumal man auch schnell durcheinanderkommen kann wenn man den Index zu einer normalen Spalte macht oder eine normale Spalte als Index verwendet und sich dadurch die Spaltennumerierung ändert. Im Beispiel vom OP fallen die ersten beiden Spalten ja normalerweise weg, weil man die sehr wahrscheinlich zusammengenommen zum Index machen würde.
Wenn man Indexwerte verwenden möchte, kann man das über `iat`: ``summe = data.iat[2, 3] + data.iat[2, 4]``
Wenn man Indexwerte verwenden möchte, kann man das über `iat`: ``summe = data.iat[2, 3] + data.iat[2, 4]``
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis