Вызов Pandas применяется к пустому фрейму данных с использованием типов данных изменений изменений - PullRequest
0 голосов
/ 02 января 2019

Я понимаю, что метод apply вызывается даже для пустого фрейма данных.Когда есть ошибка внутри метода apply, она не распространяется.Я смотрел на эту ссылку на стек, которая предлагает использовать опцию reduce, чтобы функция apply не вызывалась. Панды: почему DataFrame.apply (f, axis = 1) вызывает f, когда DataFrame пуст?

Рассмотрим этот пример, в Col1, все меньше 10. Итак, датафреймпустой.Когда я использую опцию Reduce, тип данных col2 изменяется.Он преобразует числа в десятичные числа.

    d = {'col1': [1, 2], 'col2': [3, 4]}
    df = pd.DataFrame(data=d)
    mask = df["col1"] > 10
    df.loc[mask, "col2"] = df[mask].apply(lambda x: x+2, axis=1, result_type='reduce')
    print(df)

Ожидаемый результат

      col1    col2
   0    1       3
   1    2       4

Фактический результат:

      col1    col2
   0    1      3.0
   1    2      4.0

Я не уверен, почему он преобразует целые числа в десятичные,Кто-нибудь знает, как этого избежать?

1 Ответ

0 голосов
/ 02 января 2019

Вы можете использовать pd.to_numeric() для перевода в целое число.

Я обновлю это, если найду что-нибудь получше.

>>> import pandas as pd
>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> mask = df["col1"] > 10
>>> df.loc[mask, "col2"] = df[mask].apply(lambda x: x+2, axis=1, result_type='reduce')
>>>
>>> df
   col1  col2
0     1   3.0
1     2   4.0
>>>
>>> pd.to_numeric(df.col2, downcast='integer')
0    3
1    4
Name: col2, dtype: int8
>>>
>>> df.col2 = pd.to_numeric(df.col2, downcast='integer')
>>> df
   col1  col2
0     1     3
1     2     4
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...