Jestem trochę zirytowany sobą, ponieważ nie mogę zrozumieć, dlaczego jedno rozwiązanie problemu zadziałało, a inne nie. Tak jak w przypadku, wskazuje to na niedostateczne zrozumienie (podstawowych) pand z mojej strony, a to doprowadza mnie do szału!Sprawdzanie listy działa, ale nie dla pętli - dlaczego?
W każdym razie mój problem był prosty: miałem listę "złych" wartości ("bad_index"); odpowiadały one indeksom wierszy na ramie danych ("data_clean1"), dla których chciałem usunąć odpowiednie wiersze. Jednak ponieważ wartości zmieniają się z każdym nowym zestawem danych, nie chcę podłączać złych wartości bezpośrednio do kodu. Oto co zrobiłem najpierw:
bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]
for i in bad_index:
dataclean2 = dataclean1.drop([i]).reset_index(level = 0, drop = True)
Ale to nie zadziałało; data_clean2 pozostała taka sama jak data_clean1. Moim drugim pomysłem było użycie wyrażeń listowych (jak poniżej); to działało dobrze.
bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]
data_clean2 = data_clean1.drop([x for x in bad_index]).reset_index(level = 0, drop = True)
Dlaczego teraz działa metoda sprawdzania listy, a nie pętla "za"? Kodowałem od kilku miesięcy i uważam, że nie powinienem popełniać tego rodzaju błędów.
Dzięki!
Nie jestem pewien, co robi 'drop', ale wiem, że w' pętli for 'zmieniasz 'dataclean2' podczas każdej iteracji. –
Czy chodzi ci o rozumienie list, a nie wyrażenie regularne? Jeśli chodzi o popełnianie błędów, koduję od lat i nadal napotykam na problemy, których nie rozumiem, i popełniam błędy, które moim zdaniem nie powinny! Chciałbym móc powiedzieć, że błędy znikają z upływem czasu ... – johnchase
Tak, zredagowano dla jasności! – Lodore66