2014-04-07 13 views
6

Mam poniższy kodPandy przekształcania obiektu String małymi literami i sprawdzania ciąg

import pandas as pd 
private = pd.read_excel("file.xlsx","Pri") 
public = pd.read_excel("file.xlsx","Pub") 
private["ISH"] = private.HolidayName.str.lower().contains("holiday|recess") 
public["ISH"] = public.HolidayName.str.lower().contains("holiday|recess") 

pojawia się następujący błąd:

AttributeError: 'Series' object has no attribute 'contains' 

Czy mimo przekonwertować kolumnę „HolidayName” do małe litery, a następnie sprawdzić wyrażenie regularne ("Holiday|Recess") za pomocą .contains w jednym kroku?

Każda pomoc będzie mile widziane

+0

Jeśli warunki konwersji na małe litery, którą nigdy nie zawierać wielkich liter jak 'H' lub' R' .. – DSM

+0

Dziękuję za wskazanie, że obecnie. To było niedopatrzenie, kiedy pisałem mój przykład. Naprawiłem to. – user1452759

Odpowiedz

9
private["ISH"] = private.HolidayName.str.contains("(?i)holiday|recess") 

The (?i) w regex wzór mówi moduł re ignorowania sprawy.


Powodem, dla którego zostały otrzymuję błąd jest, ponieważ obiekt serii nie ma sposobu contains; zamiast tego atrybut Series.str ma metodę contains. Więc można uniknąć błędu z:

private["ISH"] = private.HolidayName.str.lower().str.contains("holiday|recess") 
+0

Dziękuję bardzo za pomoc. To działa :) – user1452759

+0

fajnie! czy to gdzieś jest w dokumentach? czy to jest specyficzna panda, czy coś innego? zgadywanie czegoś innego. – grisaitis

+0

@grisaitis: Wektorowe metody ciągów są [opisane tutaj] (http://pandas.pydata.org/pandas-docs/version/0.15.0/text.html#text-string- metod). Użycie '(? I)' do porównywania wzorców niewrażliwych na wielkość liter jest częścią składni Pythona 're' [regularna składnia wyrażeń] (https://docs.python.org/2/library/re.html# wyrażenia regularne). (Wyszukaj ciąg '(? ILmsux)'). – unutbu

Powiązane problemy