2017-05-16 5 views
0

일부 x 행과 y 열의 큰 데이터 세트가 있습니다. 단어 중 하나와 원하지 않는 데이터가 있습니다. 불필요한 데이터에는 특정 패턴이 없으므로 데이터 프레임에서 제거하기가 어렵습니다.데이터 프레임에서 특수 문자와 알파 숫자를 제거하는 간단한 방법

nonhashtag 
['want', 'better', 'than', 'Dhabi,', 'United', 'Arab', 'Emirates'] 
['Just', 'posted', 'photo', 'Rasim', 'Villa'] 
['Dhabi', 'International', 'Airport', '(AUH)', '\xd9\x85\xd8\xb7\xd8\xa7\xd8\xb1', '\xd8\xa3\xd8\xa8\xd9\x88', '\xd8\xb8\xd8\xa8\xd9\x8a', '\xd8\xa7\xd9\x84\xd8\xaf\xd9\x88\xd9\x84\xd9\x8a', 'Dhabi'] 
['just', 'shrug', 'off!', 'Dubai', 'Mall', 'Burj', 'Khalifa'] 
['out!', 'Cowboy', 'steppin', 'Notorious', 'going', 'sleep!', 'Make', 'happen'] 
['Buona', 'notte', '\xd1\x81\xd0\xbf\xd0\xbe\xd0\xba\xd0\xbe\xd0\xb9\xd0\xbd\xd0\xbe\xd0\xb9', '\xd0\xbd\xd0\xbe\xd1\x87\xd0\xb8', '\xd9\x84\xd9\x8a\xd9\x84\xd8\xa9', '\xd8\xb3\xd8\xb9\xd9\x8a\xd8\xaf\xd8\xa9!', '\xd8\xa3\xd8\xa8\xd9\x88', '\xd8\xb8\xd8\xa8\xd9\x8a', 'Viceroy', 'Hotel,', 'Yas\xe2\x80\xa6'] 

단어가 아닌 모든 문자는 제거해야합니다. 이것은 큰 데이터 세트의 단 하나의 열입니다. 열 이름은 nonhashtag

입니다. 간단한 방법으로 열을 청소할 수 있습니다. 바로 제거하거나 NAN

예상 출력으로 대체

nonhashtag 
    ['want', 'better', 'than', 'Dhabi,', 'United', 'Arab', 'Emirates'] 
    ['Just', 'posted', 'photo', 'Rasim', 'Villa'] 
    ['Dhabi', 'International', 'Airport', '(AUH)', 'Dhabi'] 
    ['just', 'shrug', 'off!', 'Dubai', 'Mall', 'Burj', 'Khalifa'] 
    ['out!', 'Cowboy', 'steppin', 'Notorious', 'going', 'sleep!', 'Make', 'happen'] 
    ['Buona', 'notte', 'Viceroy', 'Hotel,'] 

모든 [] 그렇게 빈 [] 필요한 경우에만 \x and remaining characters의 제거 특정 열에서 하나의 행은 행에 남아 있어야합니다. 행을 유지하는 것은 다른 행의 필수 행으로 채워지는 것처럼 중요합니다.

적절한 코드를 작성하려면 정규식을 작성하기 위해 데이터 집합에서 패턴을 찾을 수 없으므로 입력을 통과 할 수 없습니다.

미리 도움을 청하십시오.

+1

또한 원하는 데이터 세트를 게시 할 수 있습니까? – MaxU

+1

데이터 프레임을 채우는 데 사용 된 데이터를 읽는 데 잘못된 인코딩이 사용 된 것 같습니다. 파이썬 2를 사용하고 있습니까? 저는 Python 3을 사용하고 있습니다. UTF8로 표현 된 원시 바이트를 디코딩하면 합리적인 것들이 다시 생깁니다 (즉, Dhabi 열의 모든 내용이 아랍어 스크립트에있는 것처럼 보입니다. buona notte의 내용은 러시아어 번역 인 것으로 보입니다. 좋은 밤낮으로 키릴 문자로. –

+1

당신은 오직 단어가 자연어로 무엇인지, 결코 알 수 없으며, 정규 표현식까지는 그 지식을 지키는 사람이 아닙니다. – sln

답변

4

원하는 것은 무엇입니까? z

  • 공백과 탭
  • 에 ASCII 코드가

    • A에서 a에서
    • Z에 -

      In [71]: df.nonhashtag.apply(' '.join).str.replace('[^A-Za-z\s]+', '') \ 
            .str.split(expand=False) 
      Out[71]: 
      0 [want, better, than, Dhabi, United, Arab, Emir... 
      1     [Just, posted, photo, Rasim, Villa] 
      2   [Dhabi, International, Airport, AUH, Dhabi] 
      3  [just, shrug, off, Dubai, Mall, Burj, Khalifa] 
      4 [out, Cowboy, steppin, Notorious, going, sleep... 
      5     [Buona, notte, Viceroy, Hotel, Yas] 
      Name: nonhashtag, dtype: object 
      

      '[^A-Za-z\s]+'는 정규식의 의미는를 제외한 모든 문자를 를 취할 것입니다

      이렇게 .str.replace('[^A-Za-z\s]+', '') 영어 알파벳, 공백 및 탭에 속하는 글자를 제외한 모든 문자를 제거합니다

    +0

    네,이게 정확히 제가 원하는 .. 고맙습니다. –

    +0

    이것은 훌륭합니다! 저는 .apply (''.join) – Vaishali

    +1

    @SitzBlogz를 좋아해요. 원하는 데이터 세트와 같지 않습니다. 제 대답은 영어 알파벳과 공백을 제외한 모든 문자가 제거됩니다 (악센트, 움라우트 등이있는 문자 포함) – MaxU

    관련 문제