python - 在优雅地处理字符串列时查找所有列的范围(最大值和最小值之间的差异)
问题描述
我有一个场景,我必须找到数据集中所有列的范围,该数据集中包含多个具有数值的列,但一列具有字符串值。请从下面的我的数据集中找到示例记录:
import seaborn as sns
iris = sns.load_dataset('iris')
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
这些列的最大值和最小值由下式给出
sepal_length 7.9
sepal_width 4.4
petal_length 6.9
petal_width 2.5
species virginica
dtype: object
和
sepal_length 4.3
sepal_width 2
petal_length 1
petal_width 0.1
species setosa
dtype: object
...分别。要查找所有列的范围,我可以使用以下代码:
iris.max() - iris.min()
但由于列'species'有字符串值,上面的代码抛出以下错误:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
如果发生上述错误,我想将值打印为
"{max string value}" - "{min string value}"
IOW,我的预期输出将类似于:
sepal_length 3.6
sepal_width 2.4
petal_length 5.9
petal_width 2.4
species virginica - setosa
我该如何解决这个问题?
解决方案
分别处理数字和字符串列。您可以使用 选择这些df.select_dtypes
。最后,concat
结果。
u = Iris.select_dtypes(include=[np.number])
# U = u.apply(np.ptp, axis=0)
U = u.max() - u.min()
v = Iris.select_dtypes(include=[object])
V = v.max() + ' - ' + v.min()
U.append(V)
sepal_length 3.6
sepal_width 2.4
petal_length 5.9
petal_width 2.4
species virginica - setosa
dtype: object
推荐阅读
- azure-cosmosdb - 在保存到 CosmosDB 时强制使用 JsonPropertyName
- reactjs - 创建反应应用程序时postcss@8.2.6不兼容
- r - 将绘图组件存储为对象
- python - 我无法在 python 中找到方程的多个根
- byte-buddy - 字节伙伴用抽象方法定义枚举
- typescript - 无法将 EC2 实例附加到 AWS CDK 中的经典负载均衡器
- python - 为什么我的程序没有从我正在抓取的表中打印数据?
- oauth - Uber api 集成错误 uber oauth 令牌 (invalid_scope)
- amazon-web-services - 使用 Amazon Kinesis 客户端库时的超时问题导致记录丢失
- python - 使用 pyautogui 用“+”替换多个空字符串