Cześć, pytanie trochę głupie, bo niby to podstawy Pythona, ale nie działa mi wyrażenie logiczne, które według mnie, powinno działać.
if ('Java' or 'PHP') in row:
mianowicie python wykonuje polecenie, które ma wykonać ta pętla, ale tylko dla pierwszego wyrażenia, w tym wypadku, gdy znajdzie w wierszu słowo 'Java'. Gdy zmienię wyrażenie na takie:
if 'Java' in row or 'PHP' in row:
Wtedy wszystko działa, ale wygląda to słabo. Ma ktoś pomysł co tu może być nie tak?
Pozdrawiam

- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17

- Rejestracja:prawie 7 lat
- Ostatnio:około 11 godzin
- Lokalizacja:Kraków
- Postów:2000
if
to nie pętla.
Pobawmy się w interpreter Pythona i zobaczmy w jaki sposób analizuje on Twój kod; zaczynamy z:
if ('Java' or 'PHP') in row:
Jak widać, mamy do czynienia z instrukcją warunkową - aby sprawdzić czy powinniśmy wykonać jej ciało, musimy zewaluować ("uruchomić" / "policzyć") wyrażenie:
('Java' or 'PHP') in row
Pierwszym w kolejności operatorem jest in
, który przyjmuje dwa argumenty - zanim policzymy wartość samego in
, musimy policzyć wartości obydwu jego argumentów; zacznijmy od lewej strony:
'Java' or 'PHP'
Whoops - no i mamy błąd: ile wynosi wartość wyrażenia 'Java' or 'PHP'
? Czy to wyrażenie ma w ogóle sens?
tl;dr powinieneś mieć row in ["Java", "PHP"]


- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17
Rzeczywiście, pomyliło mi się z pętlą for, bo instrukcja warunkowa if znajduje się w pętli for, której nie wrzuciłem w tym poście ;)
Wracając do tematu, całość wygląda tak:
for row in df['Job title']:
if row in ['JAVA', 'PHP']:
job_category.append('backend')
Zmieniłem wyrażenie logiczne tak jak poleciłeś, natomiast teraz w ogóle nie pokazuje żadnych wyników :(


- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17
Bo pracuję na DataFrame i chcę stworzyć skrypt, który szuka po każdym wierszu czy w kolumnie 'Job title' występuje słowo takie jak JAVA albo PHP

- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17
Nie rozumiem za bardzo pytania ;/ Gdybym użył zmiennch row1 i row2 to ten skrypt w ogóle by nie działał. Inne skrypty robiłem podobnie do tego i zawsze działało wszystko dobrze. Ja to rozumiem w ten sposób, że zmienna row przyjmuje wartość każdego wiersza po kolei i gdy znajdzie określony tekst w kolumnie to wykona polecenie poniżej. Czy coś zrozumiałem nie tak?


- Rejestracja:prawie 7 lat
- Ostatnio:około 11 godzin
- Lokalizacja:Kraków
- Postów:2000
Jeśli pracujesz na DataFrame, absolutnie nie ma sensu robić tego w pętli. Do tego możesz użyć DataFrame.filter
lub DataFrame.loc

- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17
Owszem, tylko zauważ, że nie chodzi mi o samo wyszukanie, a o to, że gdy wyszuka taki tekst to żeby wrzuciło napis 'Backend' do nowej listy, z której później robię kolumnę

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Błąd teraz polega na tym że warunek row in ["JAVA", "PHP"]
sprawdza czy row
jest równy dokładnie któremuś z tych słów, a przecież nie o to chodziło. Musiałbyś jednak miec
for keyword in ["JAVA", "PHP"]:
if keyword in row:
# cośtam
Bo przeciez dla każdego ze słów kluczowych chcesz sprawdzić czy wystąpiło w row
.

- Rejestracja:prawie 7 lat
- Ostatnio:około 11 godzin
- Lokalizacja:Kraków
- Postów:2000
prociusiek x napisał(a):
Owszem, tylko zauważ, że nie chodzi mi o samo wyszukanie, a o to, że gdy wyszuka taki tekst to żeby wrzuciło napis 'Backend' do nowej listy, z której później robię kolumnę
Tego nie widzimy, bo nie powiedziałeś co chcesz zrobić.
W takim razie potrzebujesz DataFrame.loc
- umożliwia modyfikację odfiltrowanych wierszy DataFrame. Możesz dorzucić sobie kolumnę job_category
, odfiltrować w loc
i uzupełnić mniej więcej tak (piszę z pamięci, nie używałem pandas od dość dawna):
df.loc[<wyrażenie>]['job_category'] = 'backend'
Tutaj masz dokumentację: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc
jeśli pamiętam, sprawdzanie czy zawartość wiersza zawiera się w liście / zbiorze / krotce było tricky i takie zwykłe x in [y, z]
nie działało z loc
, ale dało się to zrobić

- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:17
Znaczy tak jak napisałem na początku tego posta, chciałem aby skrypt wyszukiwał czy słowo "JAVA" lub słowo "PHP" występuje w danym wierszu, jeśli tak to wpisuje słowo "Backend" do listy. Wyrażenie logiczne, którego używam działa wtedy gdy użyję:
for row in df['Job title']:
if 'JAVA' in row or 'PHP' in row:
job_category.append('backend')
Natomiast chciałbym, żeby oba słowa zamknąć w jednym nawiasie. Dodam, że pętla, którą zaproponowałeś nie do końca mnie satysfakcjonuje, ponieważ mam także plan, żeby do listy były dopisywane także inne słowa, które spełnią inny warunek. Problem mam z samym zbudowaniem wyrażenia logicznego.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
PerlMonk