#python #pandas #numpy #one-hot-encoding
Вопрос:
Я использую этот код для однократного кодирования своих последовательностей, но он работает только для одной последовательности и не работает для моего CSV-файла, содержащего мои последовательности, что я могу для этого сделать? это код
data = 'MGILPSPGMPALLSLVSLLSVLLMGCVAETGTQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSSVLHSTQDLFLPFFSNVTWFHAIHVSGTNGTKRFDNPVLPFNDGVYFASTEKSNIIRGWIFGTTLDSKTQSLLIVNNATNVVIKVCEFQFCNDPFLGVYYHKNNKSWMESEFRVYSSANNCTFEYVSQPFLMDLEGKQGNFKNLREFVFKNIDGYFKIYSKHTPINLVRDLPQGFSALEPLVDLPIGINITRFQTLLALHRSYLTPGDSSSGWTAGAAAYYVGYLQPRTFLLKYNENGTITDAVDCALDPLSETKCTLKSFTVEKGIYQTSNFRVQPTESIVRFPNITNLCPFGEVFNATRFASVYAWNRKRISNCVADYSVLYNSASFSTFKCYGVSPTKLNDLCFTNVYADSFVIRGDEVRQIAPGQTGKIADYNYKLPDDFTGCVIAWNSNNLDSKVGGNYNYLYRLFRKSNLKPFERDISTEIYQAGSTPCNGVEGFNCYFPLQSYGFQPTNGVGYQPYRVVVLSFELLHAPATVCGPKKSTNLVKNKCVNFNFNGLTGTGVLTESNKKFLPFQQFGRDIADTTDAVRDPQTLEILDITPCSFGGVSVITPGTNTSNEVAVLYQDVNCTEVPVAIHADQLTPTWRVYSTGSNVFQTRAGCLIGAEHVNNSYECDIPIGAGICASYQTQTNSPSGAGSVASQSIIAYTMSLGAENSVAYSNNSIAIPTNFTISVTTEILPVSMTKTSVDCTMYICGDSTECSNLLLQYGSFCTQLNRALTGIAVEQDKNTQEVFAQVKQIYKTPPIKDFGGFNFSQILPDPSKPSKRSFIEDLLFNKVTLADAGFIKQYGDCLGDIAARDLICAQKFNGLTVLPPLLTDEMIAQYTSALLAGTITSGWTFGAGAALQIPFAMQMAYRFNGIGVTQNVLYENQKLIANQFNSAIGKIQDSLSSTASALGKLQDVVNQNAQALNTLVKQLSSNFGAISSVLNDILSRLDPPEAEVQIDRLITGRLQSLQTYVTQQLIRAAEIRASANLAATKMSECVLGQSKRVDFCGKGYHLMSFPQSAPHGVVFLHVTYVPAQEKNFTTAPAICHDGKAHFPREGVFVSNGTHWFVTQRNFYEPQIITTDNTFVSGNCDVVIGIVNNTVYDPLQPELDSFKEELDKYFKNHTSPDVDLGDISGINASVVNIQKEIDRLNEVAKNLNESLIDLQELGKYEQYIKGSGRENLYFQGGGGSGYIPEAPRDGQAYVRKDGEWVLLSTFLGHHHHHHHH'
alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
integer_encoded = [char_to_int[char] for char in data]
onehot_encoded = list()
for value in integer_encoded:
letter = [0 for _ in range(len(alphabet))]
letter[value] = 1
onehot_encoded.append(letter)
e = np.array(onehot_encoded)
этот код работает для одной последовательности, но когда я хочу использовать весь свой набор данных, представляющий собой CSV-файл, он не работает.
data = pd.read_csv("database.csv", usecols=[4])
и это моя база данных.csv выглядит так
а это колонка[4]
Sequence
0 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
1 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
2 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
3 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
4 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
5 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
6 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
7 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
8 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
.
.
.
40 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
41 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
42 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
43 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
44 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
45 MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSS...
и в этом заключается ошибка
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
in <module>
5 char_to_int = dict((c, i) for i, c in enumerate(alphabet))
6
----> 7 integer_encoded = [char_to_int[char] for char in data]
8
9 onehot_encoded = list()
5 char_to_int = dict((c, i) for i, c in enumerate(alphabet))
6
----> 7 integer_encoded = [char_to_int[char] for char in data]
8
9 onehot_encoded = list()
KeyError: 'Sequence'
и это ошибка после использования этого кода
# Import Dependencies
import pandas as pd
import numpy as np
# Function to encode sequences
def encode_seq(sequence):
alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
integer_encoded = [char_to_int[char] for char in data]
onehot_encoded = list()
for value in integer_encoded:
letter = [0 for _ in range(len(alphabet))]
letter[value] = 1
onehot_encoded.append(letter)
return np.array(onehot_encoded)
# Read .csv
df = pd.read_csv('database.csv')
# Keep only Sequence column
df = df.filter(['Sequence'])
# Create a new column Encoded_Sequences containing encoded sequences from Sequence column
df['Encoded_Sequences'] = df['Sequence'].apply(lambda x: encode_seq(x))
KeyError Traceback (most recent call last)
in <module>
25
26 # Create a new column Encoded_Sequences containing encoded sequences from Sequence column
---> 27 df['Encoded_Sequences'] = df['Sequence'].apply(lambda x: encode_seq(x))
in apply(self, func, convert_dtype, args, **kwargs)
4355 dtype: float64
4356 """
-> 4357 return SeriesApply(self, func, convert_dtype, args, kwargs).apply()
4358
4359 def _reduce(
in apply(self)
1041 return self.apply_str()
1042
-> 1043 return self.apply_standard()
1044
1045 def agg(self):
in apply_standard(self)
1097 # List[Union[Callable[..., Any], str]]]]]"; expected
1098 # "Callable[[Any], Any]"
-> 1099 mapped = lib.map_infer(
1100 values,
1101 f, # type: ignore[arg-type]
in pandas._libs.lib.map_infer()
in <lambda>(x)
25
26 # Create a new column Encoded_Sequences containing encoded sequences from Sequence column
---> 27 df['Encoded_Sequences'] = df['Sequence'].apply(lambda x: encode_seq(x))
in encode_seq(sequence)
7 alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
8 char_to_int = dict((c, i) for i, c in enumerate(alphabet))
----> 9 integer_encoded = [char_to_int[char] for char in data]
10 onehot_encoded = list()
11
in <listcomp>(.0)
7 alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
8 char_to_int = dict((c, i) for i, c in enumerate(alphabet))
----> 9 integer_encoded = [char_to_int[char] for char in data]
10 onehot_encoded = list()
11
KeyError: 'Sequence'
Мне нужно умножить на другую матрицу, поэтому мне нужно однократно закодировать их и превратить в массив Numpy, но он не работает с этим кодом, так что мне делать?
Комментарии:
1. Как выглядят ваши
.csv
данные? Опубликуйте текст из.csv
вашего вопроса2. @Luke Я редактирую вопрос и публикую тексты из своего CSV-файла
3. Почему код не работает на
.csv
? Покажите нам, что вы пробовали, и ошибку4. К чему приводит код
KeyError: 'Sequence'
?5. @Luke Это ошибка, и, кстати, я пытаюсь удалить строку заголовка с ‘data = pd.read_csv(«база данных.csv», usecols=[4], заголовок=Нет)’ и все равно не сработало
Ответ №1:
# Import Dependencies
import pandas as pd
import numpy as np
# Function to encode sequences
def encode_seq(sequence):
alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
integer_encoded = [char_to_int[char] for char in sequence]
onehot_encoded = list()
for value in integer_encoded:
letter = [0 for _ in range(len(alphabet))]
letter[value] = 1
onehot_encoded.append(letter)
return np.array(onehot_encoded)
# Read .csv
df = pd.read_csv('database.csv')
# Keep only Sequence column
df = df.filter(['Sequence'])
# Create a new column Encoded_Sequences containing encoded sequences from Sequence column
df['Encoded_Sequences'] = df['Sequence'].apply(lambda x: encode_seq(x))
Комментарии:
1. Он все еще показывает мне ошибку » Ошибка ключа: «Последовательность» `
2. Опубликуйте скриншот своего
.csv
3. Я публикую скриншот @Luke
4. Можете ли вы опубликовать новую ошибку и отследить ее?
5. ссылка это мой файл Я поддерживаю ваш ответ, но, пожалуйста, если вы можете взглянуть на него и посмотреть, в чем проблема здесь @Luke