python - 当我使用 numpy genfromtxt 函数将字符串转换为整数时,为什么我想要转换的都是 0
问题描述
我应该得到不同数量的不同材料的木材。但我得到了所有材料的 0。
%%writefile wood.txt
item,material,number
100,oak,33
110,maple,14
120,oak,7
145,birch,3
tree_to_int = dict(oak=1,maple=2,birch=3)
def convert(s):
return tree_to_int.get(s,0)
data = np.genfromtxt('wood.txt', delimiter=',', dtype=np.int,
names=True,converters={1:convert})
data
[输出]:
array([(100, 0, 33), (110, 0, 14), (120, 0, 7), (145, 0, 3)],dtype=[('item', '<i4'), ('material', '<i4'), ('number', '<i4')])
解决方案
原来,这是因为从“wood.txt”读取的字符串是字节串。这就是为什么他们在字典中找不到的原因。要修复它,只需像下面这样解码字节串
def convert(s):
return tree_to_int.get(s.decode("utf-8") , 0)
或者,您也可以使用 pandas
import pandas
tree_to_int = pandas.DataFrame([{'material': 'oak', 'material_int': 1}, {'material': 'maple', 'material_int': 2}, {'material': 'birch', 'material_int': 3}])
df = pandas.read_csv('wood.txt')
data = pandas.merge(df, tree_to_int, how='left', on='material')
推荐阅读
- tensorflow - 我可以逐层训练 Keras/TF 模型吗?
- datatable - 在 Vue 中制作表格的最佳方法是什么?
- python - 减少(键,值),其中值是 Spark 中的字典
- css - 预编译后 CSS 不再有效?
- c# - C# Minio PutBucket 请求:抛出状态为 NameResolutionFailure 的 WebException
- c# - 将字符串反序列化为 JSON 对象时出错
- angular - Angular 7:在 ngoninit 方法上使用 [(ngModel)] 检查复选框
- docker - nfs 不支持“overlay2”” storage-driver=overlay2
- javascript - 将内容添加到其他页面的按钮
- java - Java中默认方法中的默认关键字是可选说明符吗?