Я пишу программу, в которой функция создает объект, вызывает функцию из этого объекта, а затем использует выходные данные, которые должны представлять собой 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 имел значения, которые должны быть возвращены?