Zeilen einer .xlsx Datei löschen.

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
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Hallo Leute,

Ich habe eine .xlsx Datei und würde gerne Zeilen entfernen die kein "x" beinhalten (Abbildung ist beigefügt). Ich habe als Tipp bekommen .dropna() zu verwenden, aber habe es nicht hinbekommen. Ich würde mich über einen hilfreichen Tipp sehr freuen. Leider hatte ich nur einen viertägigen Crashkurs, weswegen ich mich damit nicht gut auskenne. Ich hoffe, dass ich hier richtig bin.

Bild
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

dropna hilft Dir hier ja nichts, Du mußt Zeilen suchen, die kein x enthalten.
Wie sieht denn Dein Code bisher aus? Wie liest Du die Tabelle, wie ist Dein Dataframe aufgebaut?
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Ok, danke,
also ich hab den Code nun geändert und dieser sieht folgendermaßen aus:
https://imagizer.imageshack.com/img924/6435/TFAyPD.jpg
ich glaube das Programm erkennt die leeren Zeilen, kann diese aber nicht löschen. Ist der Ansatz so in Ordnung?
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@python_neuling

ich bin auch ein Python Novize.
Ich vermute, es hilft, den Code hier reinzukopieren. Kein richtiger Entwickler hat Lust einen Screenshot abzutippen :)

Am Rande.
Hast Du schon mal DataFrames und Pandas angeschaut?
Damit kann man das Problem nach meinem Dafürhalten mit deutlich weniger Code lösen.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist ja sogar im wörtlichen Sinne ein Bild von einem Bildschirm.

@Buchfink: python..neuling benutzt bereits Pandas und Dataframes.

@python..neuling: Du hast beim Einlesen zu wenig Headerzeilen gelesen, das müßten bei Dir ja 3 sein. Die erste Spalte sollte ein Index sein.
Der Code zum Lesen fehlt aber bei Deinem Bild.
Eine for-Schleife ist bei Pandas fast immer falsch. Die Zellen ohne x sind bei Dir ja NaNs, also sollte das Problem mit einem Einzeiler zu lösen sein: schau Dir mal genau die Dokumentation von dropna an.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@Sirius3
Du hast Recht. Ich habe das wg. der for-Schleifen völlig übersehen. Bzw. ich habe nicht gesehen, ob pandas importiert wird.
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Vielen Dank für die Antworten :)
Also hier ist mein Code:

# Schritt 1: Zusammenfügen der excel Dateien der jeweiligien Gruppen aus Kurs 1.

import os
import glob
import pandas as pd
cwd = os.path.abspath('')
files = os.listdir(cwd)

file1 = "Auswertung_Proteinarray_G1.xlsx"
file2 = "Auswertung_Proteinarray_G2.xlsx"
file5 = "Auswertung_Proteinarray_G5.xlsx"
file6 = "Auswertung_Proteinarray_G6.xlsx"

df0 = pd.read_excel(file1, usecols="L")
df1 = pd.read_excel(file1, usecols="D,E")
df2 = pd.read_excel(file2, usecols="F,G")
df5 = pd.read_excel(file5, usecols="H,I")
df6 = pd.read_excel(file6, usecols="J,K")

data_frames = [df0, df1, df2, df5, df6]

df_total = pd.concat(data_frames, axis=1)
df_total.to_excel('combined_file1.xlsx')

# Schritt 2: Löschen der Zeilen, welche nicht identifizierte Proteine beinhalten.

check_variable = 0
for rows in range(0, len(df_total)):
for columns in range(1, len(df_total.columns)):
if df_total.iloc[rows,columns] != "x":
check_variable = check_variable +1
if check_variable == 8:
new_data = df_total.drop([rows])
check_variable = 0
else:
check_variable = 0



Im ersten Schritt habe ich 4 .xlsx Daten in eine zusammengefasst und nun wollte ich im zweiten Schritt die unwichtigen Zeilen löschen. Also glaubt ihr, dass man mit einer for Schleife keine anständige Lösung bekommt? Sonst würde ich was anderes ausprobieren.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

ja, so wie ich das sehe, ist der Verzicht auf for-Schleifen ja der große Vorteil der DataFrames (ggf. gibt's noch mehr Vorteile, die ich noch nicht kenne)
Der Code wird wesentlich übersichtlicher und kürzer, eleganter, lesbarer etc.

Kannst Du das Beispiel so ändern, dass man es mal schnell in ein Notebook/IDE kopieren und ausprobieren kann?
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Oh Schade. Wie schon gesagt hatte ich nur ein Crashkurs und for Schleifen sind eine der Sachen die ich gelernt habe. Wäre schön gewesen wenn es funktioniert hätte.
@Buchfink ich habe es in einem Jupiter-Notebook gemacht (.ipynb).
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

`glob` wird importiert, aber nicht benutzt. `files` wird auch nicht benutzt.
Bei den read_excel-Aufrufen fehlt die Angabe von headers, um die ersten drei Zeilen als Header zu definieren. Es fehlt das festlegen des Indexes.

Code: Alles auswählen

import pandas as pd

EXECL_INPUT = [
    ("Auswertung_Proteinarray_G1.xlsx", "D,E"),
    ("Auswertung_Proteinarray_G2.xlsx", "F,G"),
    ("Auswertung_Proteinarray_G5.xlsx", "H,I"),
    ("Auswertung_Proteinarray_G6.xlsx", "J,K"),
]

indix = pd.read_excel("Auswertung_Proteinarray_G1.xlsx",
    usecols="L", header=[0,1,2])['Sample']
data_frames = [
    pd.read_excel(filename, usecols=cols, header=[0,1,2])
    for filename, cols in EXCEL_INPUT
]
df_total = pd.concat(data_frames, axis=1)
df_total.set_index(index)
df_total.to_excel('combined_file1.xlsx')
df = df_total.dropna(how='all')
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

@Sirius3 vielen Dank für deine Nachricht!
Bei mir steht allerdings folgende Fehlermeldung:
ValueError: cannot specify usecols when specifying a multi-index header
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann mußt Du das Einlesen eben anders lösen.
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Alles klar, ich versuch es. Kannst Du mir vielleicht verraten, was das ['Sample'] macht?
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Ich hab es hinbekommen!
Vielen Dank an alle, die mir weiter geholfen haben! :)
Antworten