TypeError: объект 'NoneType' не может быть подписан при создании словаря pd.Dataframe - PullRequest
0 голосов
/ 15 мая 2018

Я получаю ошибку: TypeError: объект 'NoneType' недопустим

В этом методе я пытаюсь выполнить сопоставление строк для двух файлов (test & master). Главный файл содержит правильно написанные названия продуктов, в то время как тестовый файл содержит неправильно написанные или просто по-разному написанные версии этих продуктов. Я пытаюсь сопоставить их вместе с функцией extractBests, чтобы включить срез при определенном балле. Также, если я печатаю более ранние шаги моего вывода, например, переменная fhp_new, она все еще работает.

Я думаю, что ошибка как-то вызвана тем фактом, что некоторые строки не дают совпадений, которые находятся в пределах предела Score_cutoff, потому что я не получаю ошибку, когда я наложил ограничение, скажем, на 20. Так что в теории те строки должны оставаться пустыми, но это вызывает ошибку, я думаю.

Эта строка кода вызывает ошибку:

for x in range (1, num_match + 1):
            d["Match{0}".format(x)] = [y[0] for y in aggregated_matches["Match" + str(x)]]

Это полный код до строки ошибки

def StringMatch (master, testfile, num_match=3, score_cutoff=95, limit=3):
        master_names = master.iloc[:,3]
        test_names = testfile.iloc[:,0]    
        fhp_new = [process.extractBests(x, master_names, score_cutoff=score_cutoff,limit=limit) for x in test_names]
        lab=" "
        i=1

        while i<=num_match:
            lab = lab + " " + "Match" + str(i)
            i = i+1
        aggregated_matches = pd.DataFrame(fhp_new, columns = lab.split())

        d={}
        for x in range (1, num_match + 1):
            d["Match{0}".format(x)] = [y[0] for y in aggregated_matches["Match" + str(x)]]
        print(d)

1 Ответ

0 голосов
/ 15 мая 2018

Если я вас правильно понимаю, вы просто хотите проверить, если y is None:

def StringMatch (master, testfile, num_match=3, score_cutoff=95, limit=3):
        master_names = master.iloc[:,3]
        test_names = testfile.iloc[:,0]    
        fhp_new = [process.extractBests(x, master_names, score_cutoff=score_cutoff,limit=limit) for x in test_names]
        lab=" "
        i=1

        while i<=num_match:
            lab = lab + " " + "Match" + str(i)
            i = i+1
        aggregated_matches = pd.DataFrame(fhp_new, columns = lab.split())

        d={}
        for x in range (1, num_match + 1):
            d["Match{0}".format(x)] = [None if y is None else y[0] for y in aggregated_matches["Match" + str(x)]]
        print(d)
...