Почему функция дает правильный результат, но не возвращает его должным образом? - PullRequest
0 голосов
/ 02 октября 2019

Я пишу программу, в которой функция создает объект, вызывает функцию из этого объекта, а затем использует выходные данные, которые должны представлять собой Pandas DataFrame, полный чисел с плавающей запятой, например:

def func_a():
    text_df = None
    ts = TextSearcher()
    text_df = (ts.topic_sim(list(p1), False)
    text_max = text_df.max().max()
    #etc

class TextSearcher():
     def topic_sim(p1, jstor=None):
          doclist = []
           df = pd.DataFrame(index=list(p1), columns=list(p1))
           for i in range(len(p1)):
                doclist.append(p1[i].attrs['title'])
            for i in range(len(p1)-1):
                for j in range(i+1,len(p1)):
                     score = self.get_BM25_score(p1[i].attrs['DOI'], doclist)
                     df.loc[p1[i].attrs['DOI'],p1[j].attrs['DOI']] = score
                     df.loc[p1[j].attrs['DOI'],p1[i].attrs['DOI']] = score
            return df

Когда я приказываю topic_sim напечатать (df) непосредственно перед его возвратом, он печатает желаемый результат:

                          10.1007/s00799-015-0156-0  ... 10.1002/anie.199013901
10.1007/s00799-015-0156-0                       NaN  ...               0.452615
10.1002/anie.198709311                     0.452615  ...                1.79016
10.1002/anie.199013901                     0.452615  ...                1.79016
10.1021/acscatal.7b00482                   0.452615  ...                3.19946
10.1002/anie.198916551                     0.452615  ...                1.55234
10.1002/anie.199013901                     0.452615  ...                1.79016

Однако в func (a) df = topic_sim(p1, False) - это DataFrame, полный NaN,например:

                      10.1007/s00799-015-0156-0  ... 10.1002/anie.199013901
10.1007/s00799-015-0156-0                       NaN  ...                    NaN
10.1002/anie.198709311                          NaN  ...                    NaN
10.1002/anie.199013901                          NaN  ...                    NaN
10.1021/acscatal.7b00482                        NaN  ...                    NaN
10.1002/anie.198916551                          NaN  ...                    NaN
10.1002/anie.199013901                          NaN  ...                    NaN

Почему это происходит и как я могу сделать так, чтобы df в topic_sim имел значения, которые должны быть возвращены?

1 Ответ

0 голосов
/ 02 октября 2019

Это должно работать

     def topic_sim(p1, jstor=None):
          doclist = []
           df = pd.DataFrame(index=list(p1), columns=list(p1))
           for i in range(len(p1)):
                doclist.append(p1[i].attrs['title'])
            for i in range(len(p1)-1):
                for j in range(i+1,len(p1)):
                     score = self.get_BM25_score(p1[i].attrs['DOI'], doclist)
                     df.loc[p1[i].attrs['DOI'],p1[j].attrs['DOI']] = score
                     df.loc[p1[j].attrs['DOI'],p1[i].attrs['DOI']] = score
                     return df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...