计算数据帧的最小值和最大值时的TypeError

时间:2018-03-07 08:01:27

标签: python pandas

我有这段代码并且运行顺利:

import seaborn as sns
iris = sns.load_dataset('iris')
iris.apply(lambda col: max(col), axis=0)
iris.apply(lambda col: min(col), axis=0)

但是当我试图获得最大值和最小值之间的差异时,我收到一个错误:TypeError: ("unsupported operand type(s) for -: 'str' and 'str'", 'occurred at index species')

iris.apply(lambda col: max(col) - min(col), axis=0)

我认为max()min()都成功了,max() - min()也会成功。这有什么问题?

1 个答案:

答案 0 :(得分:2)

使用select_dtypes过滤掉字符串列,因为你不能对字符串进行算术运算(...对吗?!)。然后,您可以使用pd.DataFrame.max/min对其进行矢量化,而无需apply

v = iris.select_dtypes(exclude=[object])
v.max(0) - v.min(0)

sepal_length    3.6
sepal_width     2.4
petal_length    5.9
petal_width     2.4
dtype: float64

好吧,如果你知道你的数据集,虹膜数据集中唯一的非数字列就是标签(又名species列),所以你可以,

v = iris.drop('species', 1)

其余的都是一样的。调用pd.DataFrame.drop 会影响原始数据框。