Для l oop on Pandas возвращает NaN для всех значений при попытке вычесть два значения? - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь вычислить k-3 ближайших соседей вручную, используя расстояние до Манхэттена.

У меня есть фрейм данных с именем data и наблюдение с запросом под названием query. Мне нужно быть в состоянии сделать что-то подобное sum(abs(query-data)) для каждого наблюдения в data.

. До сих пор я писал для l oop вот так:

 numeric_columns = data.columns[data.dtypes == np.number]

for rows in data:
    print(query[numeric_columns] - data[numeric_columns])

Это возвращает имена всех столбцов со значениями как NaN для исходной длины data: 16, 16 раз больше. Я совершенно новичок в написании циклов и не совсем понимаю, что я здесь сделал неправильно. Я также хочу иметь возможность вернуть расстояние и индекс, но думаю, что я должен попытаться получить это для l oop правильно сначала.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 05 апреля 2020

Существует метод sub, который используется для вычитания фреймов данных. Вы можете узнать больше здесь NaN при вычитании фреймов данных pandas и здесь https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sub.html. Что насчет l oop. Вы хотите, чтобы вычитались только цифры c столбцов, поэтому вам нужно проверить if. Тогда l oop должно выглядеть следующим образом:

for rows in data:
    if data[rows].dtypes == np.number:
        t = query[row].sub(data[row], fill_value=0)
        print(t)

С таким oop таким образом вам не нужна эта часть numeric_columns = data.columns[data.dtypes == np.number]

...