使用NumPy加载含字符串与数值的CSV文件报错,如何分离两类数据?
解决NumPy加载混合类型CSV的问题
没问题!你遇到的这个错误很常见——np.loadtxt() 默认会把所有数据当成数值类型解析,而你的CSV里第一列是字符串格式的城市名,自然就转不动啦。不过完全可以正常加载并分离字符串和数值数据,给你两种实用的方法:
方法一:用np.loadtxt指定结构化数据类型
你可以提前定义一个包含字符串和整数的结构化数据类型,告诉NumPy每列该怎么解析:
import numpy as np # 假设你的CSV文件名为cities.csv,内容如下: # Boston 122 # New York 152 # Michigan 158 # 定义结构化dtype:第一列是长度10的字符串,第二列是整数 data = np.loadtxt('cities.csv', dtype=[('city', 'U10'), ('population', int)]) # 轻松分离城市名和人口数据 cities = data['city'] populations = data['population'] print(cities) # 输出:['Boston' 'New York' 'Michigan'] print(populations) # 输出:[122 152 158]
方法二:用np.genfromtxt自动推断类型
np.genfromtxt比loadtxt更灵活,能自动识别每列的数据类型,处理混合类型数据更省心:
import numpy as np # 如果你的CSV没有表头,就把names改成自定义的字段名,比如names=['city', 'population'] data = np.genfromtxt('cities.csv', dtype=None, names=True, encoding='utf-8') # 按字段名提取数据 cities = data['city'] populations = data['population'] print(cities) print(populations)
这里dtype=None让NumPy自动推断每列的类型,encoding='utf-8'是为了避免字符串编码相关的警告。
用这两种方法都能顺利解决你遇到的ValueError,完美分离字符串和数值数据~
内容的提问来源于stack exchange,提问作者איתי שולמן
相关产品推荐
相关产品推荐

