Nur die erste Spalte aus einer Excel Tabelle einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DennisC
User
Beiträge: 3
Registriert: Donnerstag 30. Oktober 2014, 15:06

Hallo zusammen,

für meine Masterarbeit muss ich etwas in Python programmieren.
Da ich keine Vorkenntnisse in Python hatte, habe ich mit einigen Tutorials angefangen.
Jetzt bin ich aber an einem Punkt wo ich nicht weiter komme, es ist bestimmt ganz einfach.
ich möchte nur die erste Zeile einer Excel Tabelle einlesen und in einen Vektor schreiben,
ich dachte eigentlich es würde so funktionieren, aber es wird immer die gesamte Reihe der csv eingelesen.

Code: Alles auswählen

import csv
with open('some.csv', 'rb') as f:
    reader =csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
    for line in reader:
        print line
Danke
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@DennisC: meinst Du jetzt erste Zeile oder erste Spalte?
Wenn Du die erste Spalte meinst, mußt Du immer ganze Zeilen lesen, weil das CSV-Format keine Information darüber enthält, wo welche Zelle in der Datei steht. Wenn Dich aber nur das erste Element jeder Zeile interessiert, dann arbeite halt nur damit weiter: »print line[0]«.
BlackJack

@DennisC: Ergänzende Anmerkung: Der Betreff spricht von einer Excel-Tabelle, der Programmcode liest aber eine CSV-Datei. Was mit Excel nur in soweit zu tun hat, dass das halt *eine* Software unter vielen ist, die CSV-Dateien speichern und laden kann.

„Vektor” ist kein Datentyp in Python, also meinst Du vielleicht eine Liste.

Andererseits kann es, je nach weiterer Verarbeitung der Daten, eventuell Sinn machen das `numpy`-Package zu verwenden, und falls man das sowieso im weiteren Verlauf benötigt, sollte man auch gleich dessen Funktionen zum Lesen von Textdateien in Erwägung ziehen.
DennisC
User
Beiträge: 3
Registriert: Donnerstag 30. Oktober 2014, 15:06

@Sirius3, danke für die Antwort, allerdings scheint es bei mir nicht zu funktionieren,

meine Excel liste sieht so aus
  • 1 2
    2 2
    3 2
    4 2
    5 2
    6 2
mit dem code

Code: Alles auswählen

import csv
with open('some.csv', 'rb') as f:
    reader =csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
    for line in reader:
        print line[0]
        a=line[0]

print(a)
erhalte ich nun folgendes Ergebnis
1;2
2;2
3;2
4;2
5;2
6;2
7;2
8;2
8;2

@Blackjack,
hast du ein Bsp. für micht wie man Daten mit numpy einliest.

Danke
BlackJack

@DennisC: Das passt alles nicht zusammen. In den Beispieldaten gibt es nur Leerraum als Trennzeichen, im Code gibst Du ein Komma als Trennzeichen an, und in der Ausgabe sind dann plötzlich Semikolons als Trennzeichen. Was stimmt denn nun? Falls es wirklich Semikolons sind, dann sollte man vielleicht auch *das* als Trennzeichen beim Einlesen angeben. ;-)

Bezüglich Numpy da gibt's Dokumentation. Das Benutzerhandbuch (User Guide) hat beim Grundlagenkapitel ein Unterkapitel zur Datenein- und ausgabe. Die Kapitel davor sollte man aber auch durchgearbeitet haben, und mindestens das danach über Indexzugriffe dürfte auch interessant sein wenn man mit den Arrays dann auch arbeiten möchte.
DennisC
User
Beiträge: 3
Registriert: Donnerstag 30. Oktober 2014, 15:06

So jetzt habe ich es gschafft,

hier der Code falls noch mal jemand das selbe vor hat.
Dennis

Code: Alles auswählen

import csv
import numpy as np

reader=csv.reader(open("Config.csv","rb"),delimiter=';')
csv_liste=list(reader)
config=np.array(csv_liste).astype('string') #Array mit strings Variablen erzeugen
config_float=np.array(config[:,0]).astype('float')#Vektor mit float Variablen erzeugen
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

with open("Config.csv","rb") as fp:
    config_float = [float(row[0]) for row in csv.reader(fp, delimiter=';')]
ist vielleicht etwas weniger umständlich.
Das Leben ist wie ein Tennisball.
BlackJack

@DennisC: Falls jemand das selbe vorhat verwendet er hoffentlich die entsprechende Numpy-Funktion zum einlesen von solchen Textdateien. Und gibt dort gleich den Typ an und die Spalten die verwendet werden sollen. Umständlicher als so geht es wohl kaum. ;-)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Zur Vollständigkeit, falls jemand mal das selbe Problem hat wie DennisC:

Code: Alles auswählen

config = numpy.genfromtxt('config.csv', delimiter=';', usecols=0)
Antworten