我想检查所有值是否具有与第一行相同的类型。 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应该是明智的。第二个适用于系列,也应该是元素明智的。那么为什么结果不相等?
答案 0 :(得分:0)
我花了一段时间才了解jpp的评论。但是我想我现在可以回答自己的问题。
df.iloc [0] 返回一个熊猫系列,它是一个numpy数组。因此,其中的所有类型也都是numpy类型。该数字将转换为 numpy.int64
DataFrame中的值似乎是本机python类型。显然不等于numpy int。
我最初尝试进行的比较应该是这样的:
df.applymap(type) == df.head(1).applymap(type).iloc[0]