Почему я получаю разные результаты для pandas Series.apply и DataFrame.applymap? - PullRequest
0 голосов
/ 03 октября 2018

Я хотел бы проверить, все ли значения имеют те же типы, что и в первой строке.Каким-то образом df.applymap и series.apply не ведут себя так, как я бы предположил.

Набор данных взят из анализа настроений imdb на kaggle.

print (df.head ())

         id  sentiment                                             review
0  "5814_8"          1  "With all this stuff going down at the moment ...
1  "2381_9"          1  "\"The Classic War of the Worlds\" by Timothy ...
2  "7759_3"          0  "The film starts with a manager (Nicholas Bell...
3  "3630_4"          0  "It must be assumed that those who praised thi...
4  "9495_8"          1  "Superbly trashy and wondrously unpretentious ...

Кажется, что каждая строка str, int, str.Так что, кажется, все в порядке.

print (df.applymap (type))

              id      sentiment         review
0  <class 'str'>  <class 'int'>  <class 'str'>
1  <class 'str'>  <class 'int'>  <class 'str'>
2  <class 'str'>  <class 'int'>  <class 'str'>
3  <class 'str'>  <class 'int'>  <class 'str'>
4  <class 'str'>  <class 'int'>  <class 'str'>

Вызов apply для серии выглядит несколько иначе.Настроение: int64 вместо int .

print (df.iloc [0] .apply (type))

id                   <class 'str'>
sentiment    <class 'numpy.int64'>
review               <class 'str'>
Name: 0, dtype: object

Может быть, все равно, поэтому я сравнил типы.

print (df.applymap (type) == df.iloc [0] .apply (type))

    id  sentiment   review
0   True    False   True
1   True    False   True
2   True    False   True
3   True    False   True
4   True    False   True

Результат неожиданный.По крайней мере, первая строка должна быть True, True, True.Я использую applymap в DataFrame, который должен быть поэлементным.Второе применимо к серии, которая также должна быть поэлементной.Так почему же результаты не равны?

1 Ответ

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

Мне потребовалось некоторое время, чтобы понять комментарий jpp.Но я думаю, что теперь я могу ответить на свой вопрос.

df.iloc [0] возвращает серию панд, которая является массивом пустышек.Таким образом, все типы там тоже есть.Число преобразуется в numpy.int64

Значения в DataFrame выглядят как собственные типы Python.Который явно не равен numpy int.

Мое первоначально попытанное сравнение должно быть таким:

df.applymap(type) == df.head(1).applymap(type).iloc[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...