Seite 1 von 1

Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Sonntag 9. November 2014, 19:13
von DennisC
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

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Sonntag 9. November 2014, 19:29
von Sirius3
@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]«.

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Sonntag 9. November 2014, 19:39
von 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.

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Sonntag 9. November 2014, 21:06
von DennisC
@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

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Sonntag 9. November 2014, 21:19
von 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.

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Dienstag 11. November 2014, 19:25
von DennisC
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

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Dienstag 11. November 2014, 19:41
von EyDu

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.

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Dienstag 11. November 2014, 20:59
von 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. ;-)

Re: Nur die erste Spalte aus einer Excel Tabelle einlesen

Verfasst: Mittwoch 12. November 2014, 09:05
von Sirius3
Zur Vollständigkeit, falls jemand mal das selbe Problem hat wie DennisC:

Code: Alles auswählen

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