pandas dropna не удаляет nan при использовании np.where - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть эта функция

import pandas as pd
import numpy as np
from shapely.geometry import Point, Polygon

def test(e, n):

    polygon = Polygon([(340,6638),(340,6614),(375,6620),(374,6649)])
    point_instance = Point((e, n))

    a = polygon.contains(point_instance)
    val = np.where(a, 0, np.nan)

    return pd.Series([val])

Я хочу применить вышеуказанную функцию в моем фрейме данных, а затем удалить nan

def testData(filename):
    df = pd.read_csv(filename)
    df['check'] = df\
        .apply(lambda x: test(x['E'], x['N']), axis=1)

    # I tried both of these and doesnt delete nan values
    df.dropna(axis=0, how = 'any', inplace = True)
    df1 = df.dropna(axis=0, how='any', subset=['check'])

Однако, если я сохраню данные в файле и используюДропна, тогда это работает.

Пример кадра данных

Id,E,N
1,5,8
2,6,9
3,7,10

Это вывод, который я получаю

Id  E  N check    
1     5      8                 nan
2     6      9                 nan
3     7     10                 nan

1 Ответ

0 голосов
/ 05 декабря 2018

Кажется, использование np.nan внутри np.where создает типы данных конфликтов.И по этой причине, pandas dropna не работал.

Я исправил использование карты панд внутри своей функции

a = pd.Series(polygon.contains(point_instance))

val = a.map({True: 0, False: np.nan})
return val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...