Как использовать цикл For в Python для создания списка?

#python #loops #for-loop

#python #циклы #for-loop

Вопрос:

У меня есть набор данных, и образец выглядит так:

 ID_1    ID_2    
97353   959
9723    168
128     743512
124564  14599
16149   14149
  

Я пытаюсь создать список, используя цикл for, который объединял бы идентификаторы в одних и тех же строках и создавал, например:

 [[97353, 959], [9723, 168]...]
  

До сих пор я писал:

 list1 = []
for i in df:
    list1.append(i)
  

Однако это просто выдает вывод, который выглядит как:

 ['9', '7', '3', '5', '3', 't', '9', '5', '9', 'n',...
  

Может кто-нибудь подсказать, как изменить цикл for для получения результата, который я пытаюсь получить? Спасибо!

Комментарии:

1.Это происходит потому, что df это не Pandas Dataframe , а строка.

Ответ №1:

Извлеките каждый из столбцов в виде списка, затем создайте список списков, используя понимание списка zip или используя list для объекта zip. Например, вы получаете данные в нужной форме из двух списков, например, так.

 l1 = [1,2,3,4,5]
l2 = [6,7,8,9,10]
  

Вы можете использовать любое из приведенных ниже выражений, чтобы получить то, что вы ищете

 list(zip(l1,l2))

[[x,y] for x, y in zip(l1,l2)] 
  

Если вы используете pandas, вы можете извлекать столбцы в виде списков следующим образом

 ID_1_list = df['ID_1'].tolist()
ID_2_list = df['1D_2'].tolist()
  

Просто замените df на имя вашего фрейма данных.

Объединение всего вышеперечисленного вместе:

 ID_1_list = df['ID_1'].tolist()
ID_2_list = df['1D_2'].tolist()
my_data = list(zip(ID_1_list, ID_2_list))
  

Комментарии:

1. В OP не указано, как они создали фрейм данных. Должен ли я предполагать pandas?

2. Привет, спасибо за ответы. Проблема, с которой я сталкиваюсь при реализации этого, заключается в том, что данные находятся в формате .txt. Поэтому при попытке преобразовать векторы в список я получаю ошибку «строковые индексы должны быть целыми числами». Я пробовал int(df) , но я получаю это : invalid literal for int() with base 10: 'ID_1tID_2n97353t959n9232... . Есть идеи, как исправить? @JohnSalter; @S3DEV

3. @S3DEV несмотря на очевидное намерение, у OP определенно не было фрейма данных, потому что это не привело бы к результату, описанному в вопросе.

Ответ №2:

Предполагая, что это фрейм данных Pandas, попробуйте ниже:

 data = {'ID_1': [97353, 9723, 128, 124564],
    'ID_2': [959, 19, 20, 18]
    }
df = pd.DataFrame(data, columns=['ID_1','ID_2'])
list1 = []
for i in range(len(df)) : 
  list1.append([df.loc[i, "ID_1"], df.loc[i, "ID_2"]])
print (list1)
##[[97353, 959], [9723, 19], [128, 20], [124564, 18]]
  

Ответ №3:

Приведенный ниже код должен работать.

 list1 = []
f = open("file.txt", "r") 
next(f)
for i in f:
  words = i.split()
  for j in range(0, len(words)): 
    words[j] = int(words[j])  
    list1.append(words)

print(list1) 
  

Ответ №4:

вы можете распечатать их в виде кортежей внутри списка

 list1 = [1,2,3,4,5]
list2 = ['a','b','c','d','e']
mylist= []

for x in zip(list1,list2):
  mylist.append(x)
  

Вывод:

[(1, ‘a’), (2, ‘b’), (3, ‘c’), (4, ‘d’), (5, ‘e’)]