Датафрейм все еще имеет NaN - PullRequest
0 голосов
/ 03 октября 2018

Почему этот код:

def remove_empties(dataframe):
    classes = list(dataframe)
    new_dataframe = pd.DataFrame(columns=["Value", "Label"])
    for c in classes:
        X=[(k,c) for k in dataframe.loc[:,c] if k]
        T = pd.DataFrame(X, columns =["Value", "Label"] )
        new_dataframe = new_dataframe.append(T)
    return new_dataframe

все еще производит элементы NaN?Например (после печати результата):

298110                               SP  WorkState
298111                               RJ  WorkState
298112                               SP  WorkState
298113                               SP  WorkState
298114                         Scotland  WorkState
298115                              NaN  WorkState

Фактически после применения:

ans = pd.isnull(NDF).any(1).nonzero()[0]
NDF.loc[ans]

Я получаю несколько результатов:

        Value      Label
1430923   NaN  FirstName
1430923     -   LastName
1532357   jty   LastName
3822535   NaN        NaN
3830294   NaN        NaN
4300250   NaN        NaN
5201009   NaN        NaN
5396591   NaN        NaN
5485877   NaN        NaN
5561799   NaN        NaN
5619806   NaN        NaN
5680834   NaN        NaN
6620272   NaN        NaN
7539369   NaN        NaN
8390860   NaN        NaN
8688976   NaN        NaN

Один из которых нене пусто (jty, LastName), а тот, который я заметил, просто печатая, отсутствует в списке индексов ans

EDIT: (решено, но я решил опубликовать то, что мне все равно помогло, большое спасибона все ответы):

k= numpy.nan
if k :
    print("Hi")
else:
    print("NO")

печатает Привет

k= None
if k :
    print("Hi")
else:
    print("NO")

печатает НЕТ

(не говоря уже о том, как я использовал .loc [ans] вместо.loc [ans ,:])

1 Ответ

0 голосов
/ 03 октября 2018

Во-первых, я думаю, что отступ неправильный, но, конечно, это не какие-то большие сделки.

И затем вы должны знать некоторый факт, что NaN в pandas/numpy - это не просто пустые объекты.

Если вы используете следующий код, такой как bool(np.nan), он выведет True, который он точно использовал для удаления пустого на X=[(k,c) for k in dataframe.loc[:,c] if k].

Если вы хотите удалить пустой или определитьnan, пожалуйста, используйте numpy.isnan или pd.isna.Или вы просто используете pandas.dropna просто.

Второй вопрос, я думаю, вы могли бы неправильно понять значение nonzero, после pd.isnull(NDF).any(1) вы получили чистый pd.Series, который не имеет индекса.Таким образом, вы просто получаете некоторый индекс, построенный по натуральному номеру.

Проще говоря, вы должны использовать NDF.iloc[ans,:], потому что nonzero возвращает индекс Series вместо индекса dataframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...