когда я преобразую строку в целое число с помощью функции numpy genfromtxt, почему все это 0 для того, что я хочу преобразовать - PullRequest
0 голосов
/ 25 января 2019

Я должен получить разное количество разных материалов из дерева. но я получил 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')])

1 Ответ

0 голосов
/ 25 января 2019

Оказывается, это потому, что строки, считанные из "wood.txt", являются байтовыми строками. Вот почему они не могут быть найдены в словаре. Чтобы это исправить, просто расшифруйте байты, как показано ниже

def convert(s):
    return tree_to_int.get(s.decode("utf-8") , 0)

Кроме того, вы также можете использовать панд

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')

...