Seite 1 von 1

ExcelDateien in einen String umwandel

Verfasst: Mittwoch 18. März 2020, 15:04
von GajeeRedfox
Hallo Liebe Community, ich wende mich an euch mit meinen wenigen Python Erfahrungen. Ich versuche gerade verzweifelt seid zwei Tagen meine ExcelDatei als String umzuwandeln, da ich gelesen habe das man diese dann einfacher in eine Datenbank einbinden kann, leider bekomme ich mit dem Code:

#import mysql
#import mysql.connector
import pandas as pd
f = pd.read_excel("C:\\Users\\Mike\\Desktop\\Pythonprojekte\\ExcelDateien\\Students.xlsx")
#fString = f.read() #in der Zeile nimmt er weder .read noch .readlines wieso denn nicht?
print (f)
fList = []
for line in f:
fList.append(line)
print (fList)

auf eine folgende Ausgabe:

FIRST_Name LAST_NAME AGE GENDER DEGREE
0 Harold Stephess 38 M AA
1 Nicole Robertson 22 F AA
2 Russel Crawford 26 M BS
3 George Gonzales 28 F AA
4 Jean Wheeler 34 M MA
5 Sharon Cooper 37 F BS
6 Christina Powell 26 F BS
7 Kathy Henry 39 F AA
8 Eugene Banks 28 M MA
9 Emily Gonzalez 31 F AA
10 Brenda Freeman 29 M MA
11 Alice Marschall 36 F BS
12 Benjamin Graham 36 M BS
13 Diane Harris 30 F MA
14 Martin Lewis 19 M BS
['FIRST_Name', 'LAST_NAME', 'AGE', 'GENDER', 'DEGREE']

Eigentlich sollte doch die Ausgabe print(fList) alle Datensätze ausgeben, aber irgendwie spuckt es mir nur die Tabellnspaltennamen aus. Vielleicht habe ich auch nur einen kleinen Fehler drin der so Simpel ist das viele hier lachen werden, aber ich finde die Lösung des Problems nicht..

Vielen dank im vorraus

GajeeRedfox

Re: ExcelDateien in einen String umwandel

Verfasst: Mittwoch 18. März 2020, 16:01
von Sirius3
Was für ein Typ hat `f`? Und was liefert das Iterieren über dieses Objekt?
Den Typ bekommst Du mit `type(f)` und was das Iterieren liefert, steht in der Dokumentation zu diesem Datentyp.

Was willst Du eigentlich machen? Für jede Zeile in Deiner Exceltabelle einen Datensatz in einer Datenbanktabelle anlegen?

Re: ExcelDateien in einen String umwandel

Verfasst: Mittwoch 18. März 2020, 16:08
von __blackjack__
@GajeeRedfox: Warum sollte ``f.read()`` oder ``f.readlines()`` Deiner Meinung nach funktionieren? Was gibt denn die `read_excel()`-Funktion als Ergebnis zurück? Schau da mal in die Dokumentation. Und/oder lass Dir den Typ mit ``print(type(f))`` ausgeben.

Einbuchstabige Namen sind selten eine gute Idee. Wenn Du da einen vernünftigen Namen verwenden würdest, der auch tatsächlich zum Wert passt, wärst Du wahrscheinlich gar nicht erst auf die Idee gekommen, dass dieses Objekt eine `read()` oder `readlines()`-Methode haben könnte.

Zwischen Funktionsnamen und öffnender Klammer des Aufrufs gehört kein Leerzeichen.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Grunddatentypen haben in Namen nichts zu suchen. Das ändert sich im Laufe der Programmentwicklung gerne mal und dann hat man entweder false, irreführende Namen im Quelltext oder muss die überall anpassen.

Die ``for``-Schleife ist unnötig aufwändig, man könnte da auch einfach ``fList = list(f)`` für schreiben.

Und Nein, das zweite `print()` sollte nicht alle Datensätze ausgeben. So funktioniert der Datentyp nicht den `read_excel()` zurückliefert. Über den kann man iterieren, bekommt aber offensichtlich nicht alle Datensätze, sondern die Spaltennamen des ersten Datenblattes aus der Excel-Datei.

Ich sehe auch nicht wass es bringen soll die ganze Tabelle in eine Zeichenkette umzuwandeln oder auch nur alle Zellenwerte in Zeichenketten umzuwandeln. Insbesondere die Zahlen möchte man ja auch in der Datenbank als Zahlen haben.

Je nach dem was man an den Daten noch an Umbauarbeiten machen muss, oder eben auch nicht, kann Pandas mittels SQLAlchemy auch in Datenbanktabellen schreiben. Siehe `DateFrame.to_sql()`.