0

我有以下我正在尝试解决的问题。我有一个使用langdetect以下代码检索的 iso-639 语言列表

def try_detect(cell):
    try:
        detected_lang = detect(cell)
    except:
        detected_lang = None
    return detected_lang

Spotify['language'] = Spotify['artists'].apply(try_detect)
Spotify['language']  = Spotify['language'].str.upper() 
Spotify['language'].unique()

返回

array(['DE', 'PL', 'ES', 'EN', 'NL', 'TR', 'FR', 'IT', 'SK', 'RO', 'SW',
       'FI', 'AF', 'EL', 'ID', 'LT', 'CA', 'TL', 'PT', 'HR', 'RU', 'NO',
       'DA', 'SL', 'CY', 'SQ', 'KO', 'SO', 'CS', 'ET', 'ZH-CN', 'SV',
       'HU', 'LV', 'VI', 'JA', None, 'AR', 'TH', 'BG'], dtype=object)

尽管这样就足够了,但我希望在另一列中有完整的语言名称。但是,我似乎无法做到这一点。我知道

pycountry.languages.get(alpha_2='FR').name

返回French。我试过了:

Languages = Spotify['language'].unique()
LANG = []
for lang in Languages:
    Lang = pycountry.languages.get(alpha_2=lang).name
    LANG.append(Lang)

但我不断收到错误:

AttributeError: 'NoneType' object has no attribute 'name'

我在那里不知所措。任何能让我走上正轨的帮助都将不胜感激。

4

1 回答 1

1

我注意到并非所有的唯一值Spotify['language'].unique()实际上都是 iso-369 语言代码,从而设法回答了这个问题。我这个替换了

Languages = Spotify['language'].unique()
LANG = []
for lang in Languages:
    Lang = pycountry.languages.get(alpha_2=lang).name
    LANG.append(Lang)

经过

LANG = []
for lang in Languages:
    try:
        Lang = pycountry.languages.get(alpha_2=lang).name
    except:
        Lang = None
    LANG.append(Lang)

@cs95(非常感谢)在上面的评论中提供了另一种解决方案,如

Languages = Spotify['language'].dropna().unique()

两者都返回

['German',
 'Polish',
 'Spanish',
 'English',
 'Dutch',
 'Turkish',
 'French',
 'Italian',
 'Slovak',
 'Romanian',
 'Swahili (macrolanguage)',
 'Finnish',
 'Afrikaans',
 'Modern Greek (1453-)',
 'Indonesian',
 'Lithuanian',
 'Catalan',
 'Tagalog',
 'Portuguese',
 'Croatian',
 'Russian',
 'Norwegian',
 'Danish',
 'Slovenian',
 'Welsh',
 'Albanian',
 'Korean',
 'Somali',
 'Czech',
 'Estonian',
 None,
 'Swedish',
 'Hungarian',
 'Latvian',
 'Vietnamese',
 'Japanese',
 None,
 'Arabic',
 'Thai',
 'Bulgarian']

注意ZH-CN没有找到。这必须手动完成:

d = {'Language':Languages, 'Language_name':LANG}
LANGUAGE_NAMES = pd.DataFrame(d)
LANGUAGE_NAMES['Language_name'] = np.where(LANGUAGE_NAMES['Language'] == 'ZH-CN', 'Chinese', LANGUAGE_NAMES['Language_name'])

这使

  Language            Language_name
0        DE                   German
1        PL                   Polish
2        ES                  Spanish
3        EN                  English
4        NL                    Dutch
5        TR                  Turkish
6        FR                   French
7        IT                  Italian
8        SK                   Slovak
9        RO                 Romanian
10       SW  Swahili (macrolanguage)
11       FI                  Finnish
12       AF                Afrikaans
13       EL     Modern Greek (1453-)
14       ID               Indonesian
15       LT               Lithuanian
16       CA                  Catalan
17       TL                  Tagalog
18       PT               Portuguese
19       HR                 Croatian
20       RU                  Russian
21       NO                Norwegian
22       DA                   Danish
23       SL                Slovenian
24       CY                    Welsh
25       SQ                 Albanian
26       KO                   Korean
27       SO                   Somali
28       CS                    Czech
29       ET                 Estonian
30    ZH-CN                     None
31       SV                  Swedish
32       HU                Hungarian
33       LV                  Latvian
34       VI               Vietnamese
35       JA                 Japanese
36     None                     None
37       AR                   Arabic
38       TH                     Thai
39       BG                Bulgarian
于 2020-12-20T12:46:42.543 回答