我有这段代码并且运行顺利:
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()
也会成功。这有什么问题?
答案 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
不会影响原始数据框。