Используя np.where, langdetect в pandas - PullRequest
0 голосов
/ 21 июня 2020

Я хочу добавить новый столбец в фрейм данных, который будет вставлять данные из другого столбца, если он написан на английском sh, и ничего не вставлять, если он не на английском sh, используя библиотеку langdetect.

df['lyrics_english'] = np.where(detect(df["lyrics"]) == 'en', df["lyrics"], '')

Надеюсь, смысл понятен. Но у меня есть такая ошибка.

  File "C:/Users/PycharmProjects/pythontask/example", line 128, in <module>
    df['lyrics_english'] = np.where(detect(df["lyrics"]) == 'en', df["lyrics"], '')
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\langdetect\detector_factory.py", line 129, in detect
    detector.append(text)
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\langdetect\detector.py", line 104, in append
    text = self.URL_RE.sub(' ', text)
TypeError: expected string or bytes-like object

Если я наберу

df['lyrics_english'] = np.where(detect(df["lyrics"]) == 'en', 0, '')

, снова будет та же ошибка, связанная с AppData. Что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Я думаю, это может быть связано с некоторыми нестроковыми значениями, такими как nan, вы можете попробовать:

df['lyrics_english'] = np.where(detect(df["lyrics"].fillna("")) == 'en', df["lyrics"], '')

Если это не сработает, вам нужно изучить df["lyrics"].unique() и понять что там творится.

0 голосов
/ 21 июня 2020

Вы можете применить функцию через df.apply, включая условное решение:

df['lyrics_english'] = df.apply(lambda x: x.lyrics if detect(x.lyrics)=='en' else '', axis=1)

Или вы можете использовать команду map для серии, которая формирует столбец lyrics:

df['lyrics_english'] = df['lyrics'].map(lambda x: x if detect(x)=='en' else '')

Второй подход кажется более быстрым на нереалистичном c примере, который я пробовал и не использовал исходную функцию langdetect.detect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...