Spalten nach Strings durchsuchen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
toschmi
User
Beiträge: 2
Registriert: Dienstag 14. Januar 2020, 20:22

Hallo zusammen,

Ich habe folgendes Problem: Ich habe eine Excel-Tabelle als DataFrame eingelesen.
Die Tabelle besteht aus einer Spalte mit einem Index und aus einer Spalte in der ein Text steht.

Ich möchte nun durch die Spalte mit dem Text iterieren und prüfen ob ein bestimmtes Wort darin enthalten ist.
Wenn das Schlagwort in dieser Spalte steht soll die gesamte Zeile in eine neue Tabelle geschrieben werden.

Bsp:

Index | Satz
1 | Heute ist ein schöner Tag
2 | Thorsten ist ein schöner Mann
3 | gestern hat es geregnet

Ich möchte nach dem Wort "schöner" suchen und erhalte eine neue Tabelle:

Index | Satz
1 | Heute ist ein schöner Tag
2 | Thorsten ist ein schöner Mann

Wenn ich das Wort gegen "hat" tauschen würde, soll die neue Tabelle wie folgt ausssehen:

Index | Satz
3 | gestern hat es geregnet


Danke im voraus,

Gruß

toschmi
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du schon versucht? Wie würde so ein Vergleich bei einem String aussehen und welche Methode aus der Pandas-Dokumentation könnte dafür geeignet sein?
toschmi
User
Beiträge: 2
Registriert: Dienstag 14. Januar 2020, 20:22

import numpy as np
import pandas as pd
import xlrd

df = pd.read_excel("Example.xlsx")
df_new = pd.DataFrame(columns=['test_column'])

for i, row in df.iterrows():
if row.get('row_name') == 'Keyword':
df_new.append({'test_column': i}, ignore_index=True)


Das ist mein bisheriges "Konstrukt".
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Eine Grundregel: Wenn man über ein DataFrame iteriert, macht man in der Regel etwas falsch.
Es gibt bereits eine Funktion, die für dich die passenden Reihen raus sucht:

Code: Alles auswählen

data = {'Satz':['Heute ist ein schöner Tag', 'Thorsten ist ein schöner Mann', 'gestern hat es geregnet']}
df = pd.DataFrame(data)
df[df['Satz'].str.contains('schöner')]
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@toschmi: ganz praktisch wären Beispieldaten, mit denen man gleich loslegen kann, sonst muß man als Helfender immer welche selbst erfinden.

Code: Alles auswählen

In [1]: from io import StringIO

In [2]: import pandas as pd

In [3]: content = """Keyword Value
   ...: ac 7
   ...: de 9
   ...: qf 4
   ...: ac 3
   ...: de 1
   ...: """
   ...: 

In [4]: data = pd.read_csv(StringIO(content), delimiter=' ')

In [5]: data['Keyword'] == 'ac'
Out[5]: 
0     True
1    False
2    False
3     True
4    False
Name: Keyword, dtype: bool

In [6]: filtered_data = data[data['Keyword'] == 'ac']
In [7]: filtered_data
Out[7]: 
  Keyword  Value
0      ac      7
3      ac      3
Jetzt mußt Du das aber noch auf Deinen Anwendungsfall anpassen, dass Du eigentlich nicht ganze Zellen vergleichen willst, sondern nur Teilzellen. Wie sähe das denn aus, wenn Du das mit Strings machen würdest?
Antworten