Zrobiłem kilka poszukiwań i nie mogę dowiedzieć się, jak filtrować ramkę danych df["col"].str.contains(word)
, jednak zastanawiam się, czy istnieje sposób na odwrócenie: filtruj ramkę danych według komplementu tego zestawu. np .: z efektem !(df["col"].str.contains(word))
.
Czy można to zrobić DataFrame
metodą?
re.complies
i powiedziałem sobie, że do tego dojdę później. Wygląda na to, że przeszedłem wyszukiwanie i jest tak, jak mówiszdf[~df.col.str.contains(word)]
przydałby się pełny przykład: zwraca kopię oryginalnej ramki danych z wykluczonymi wierszami pasującymi do słowa.Miałem również problem z symbolem not (~), więc oto inny sposób z innego wątku StackOverflow :
df[df["col"].str.contains('this|that')==False]
źródło
df[df["col1"].str.contains('this'|'that')==False and df["col2"].str.contains('foo'|'bar')==True]
? Dzięki!df = df[~df["col"].str.contains('\|')]
Możesz użyć Zastosuj i Lambda, aby wybrać wiersze, w których kolumna zawiera cokolwiek z listy. W Twoim scenariuszu:
df[df["col"].apply(lambda x:x not in [word1,word2,word3])]
źródło
Musiałem pozbyć się wartości NULL przed użyciem polecenia zalecanego przez Andy'ego powyżej. Przykład:
df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third']) df.ix[:, 'first'] = 'myword' df.ix[0, 'second'] = 'myword' df.ix[2, 'second'] = 'myword' df.ix[1, 'third'] = 'myword' df first second third 0 myword myword NaN 1 myword NaN myword 2 myword myword NaN
Teraz uruchamiam polecenie:
~df["second"].str.contains(word)
Otrzymuję następujący błąd:
TypeError: bad operand type for unary ~: 'float'
Pozbyłem się wartości NULL za pomocą dropna () lub fillna () najpierw i ponowiłem polecenie bez problemu.
źródło
~df["second"].astype(str).str.contains(word)
aby wymusić konwersję dostr
. Zobacz stackoverflow.com/questions/43568760/…Mam nadzieję, że odpowiedzi zostały już opublikowane
Dodaję ramy, aby znaleźć wiele słów i zanegować te z dataFrame .
Here
'word1','word2','word3','word4'
= lista wzorców do wyszukaniadf
= DataFramecolumn_a
= Nazwa kolumny z DataFrame dfSearch_for_These_values = ['word1','word2','word3','word4'] pattern = '|'.join(Search_for_These_values) result = df.loc[~(df['column_a'].str.contains(pattern, case=False)]
źródło
Oprócz odpowiedzi nanselm2 możesz użyć
0
zamiastFalse
:df["col"].str.contains(word)==0
źródło
NaN