удаление неанглийских слов из df.columns

#python #pandas #nltk

#python #pandas #nltk

Вопрос:

Я добавляю несколько наборов данных вместе, к сожалению, при сборе данных некоторые сборщики данных добавили перевод к английскому вопросу.

df[‘Как вас зовут’] сообщается в других наборах данных как df [‘Как вас зовут, Комо те ламы’]

В идеале, я бы хотел только df[‘Как вас зовут’]

Это верно для столбца name, как и для многих других столбцов (возраст, жилье и т.д. и т.п.).

Я использую nltk, чтобы избавиться от всех неанглийских слов в именах столбцов, используя следующий код:

 df_t.columns = " ".join(w for w in nltk.wordpunct_tokenize(df_t.columns) 
    if w.lower() in words or not w.isalpha())
  

Но я получаю следующую ошибку error:

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-65a4c079ba1a> in <module>()
     34     df_t['File Name'] = df_t['File Name'].str.strip().str[-30:]
     35     df_t.columns = df_t.columns.str.replace(r'(^.*female.*$)', 'n_female_workers')
---> 36     df_t.columns = " ".join(w for w in nltk.wordpunct_tokenize(df_t.columns) if w.lower() in words or not w.isalpha())
     37 
     38     list_month.append(df_t)

~Anaconda3libsite-packagesnltktokenizeregexp.py in tokenize(self, text)
    129         # If our regexp matches tokens, use re.findall:
    130         else:
--> 131             return self._regexp.findall(text)
    132 
    133     def span_tokenize(self, text):

TypeError: expected string or bytes-like object
  

Как это решить?

Комментарии:

1. nltk.wordpunct_tokenize требуется str объект в качестве аргумента, вы передаете ему pd.Series

2. да, я чувствовал, что это так, не могли бы вы знать, как исправить код?

3. jezrael, к сожалению, возвращает ту же ошибку..

Ответ №1:

Я думаю, вам нужен цикл по именам столбцов для передачи скалярной string функции в wordpunct_tokenize :

 df_t = pd.DataFrame(columns=['What is your name Como te llamas'])

words = ['what','is','your','name']
df_t.columns = [" ".join(w for w in nltk.wordpunct_tokenize(x) 
                       if w.lower() in words or not w.isalpha()) 
                       for x in df_t.columns]
print (df_t)
Empty DataFrame
Columns: [What is your name]
Index: []