为什么熊猫Series.apply和DataFrame.applymap会得到不同的结果?

时间:2018-10-03 08:19:36

标签: python pandas dataframe

我想检查所有值是否具有与第一行相同的类型。 df.applymap和series.apply的行为不像我想象的那样。

数据集来自kaggle上的imdb情绪分析。

打印(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。所以一切似乎都很好。

打印(df.applymap(类型))

              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

打印(df.iloc [0] .apply(类型))

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

也许还是一样,所以我比较了类型。

打印(df.applymap(类型)== df.iloc [0] .apply(类型))

    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。我在DataFrame上使用applymap应该是明智的。第二个适用于系列,也应该是元素明智的。那么为什么结果不相等?

1 个答案:

答案 0 :(得分:0)

我花了一段时间才了解jpp的评论。但是我想我现在可以回答自己的问题。

df.iloc [0] 返回一个熊猫系列,它是一个numpy数组。因此,其中的所有类型也都是numpy类型。该数字将转换为 numpy.int64

DataFrame中的值似乎是本机python类型。显然不等于numpy int。

我最初尝试进行的比较应该是这样的:

df.applymap(type) == df.head(1).applymap(type).iloc[0]