#python #pandas #loops #dataframe
#python #pandas #циклы #фрейм данных
Вопрос:
Я новичок в Python, поэтому извините меня. Когда я был в PHP / MySQL. Я мог бы перебирать таблицу на основе любого параметра. Давайте просто скажем ID для упрощения. Как только вы найдете идентификатор, вы можете поместить каждый столбец в переменную. Просто…
Итак, я создал CSV и загрузил в фрейм данных с помощью Pandas.
switch_id,vlan_num,vlan_desc,int_vlan,int_vlan_ip,int_vlan_mask
1,20,Legal,20,192.168.20.1,255.255.255.0
1,21,HumanResources,21,192.168.21.1,255.255.255.0
2,20,Legal,20,192.168.20.2,255.255.255.0
2,21,HumanResources,21,192.168.21.2,255.255.255.0
Код, который я использую, выглядит следующим образом в качестве теста для понимания функциональности.
import pandas as pd
df = pd.read_csv('/Users/thenk83/Desktop/PythonCode/vlan_database.txt')
for i in df:
print(df[i][2])
Вариант заключается в следующем:
1
22
Finance
22
192.168.22.1
255.255.255.0
Как мне сделать так, чтобы я мог использовать row[‘switch_id’], row[‘vlan_num’] и т.д. и т.п. В принципе, я хочу поместить каждый столбец в строке в переменную. Я хочу вызвать каждую переменную самостоятельно. Я не хочу выводить всю строку в одной переменной. Я вижу, как вызывается строка, но как мне выбрать столбец. Так запутался.
В принципе, я хочу настроить несколько коммутаторов Cisco. Перебор каждой строки в фрейме данных и подключение данных к конфигурациям, где это необходимо.
Я мог бы легко сделать это с помощью Php и MySQL, но это не одно и то же. Итак, я не понимаю, как это сделать.
Я бы предпочел ничего сложного. Было бы здорово, если бы вы могли мне помочь, как можно проще. Я хотел бы понять.
Ответ №1:
IIUC, я думаю, вы ищете DataFrame.iterrows
.
Это даст тот же результат, что и ваше решение:
value_list = ['1']
df = df[df.switch_id.isin(value_list)]
for idx, row in df.iterrows():
print(row['vlan_num'],
row['vlan_desc'],
row['int_vlan'],
row['int_vlan_ip'],
row['int_vlan_mask'])
Ответ №2:
Я понял это после еще нескольких проб и ошибок. В итоге я использовал «.iloc».
import pandas as pd
df = pd.read_csv('/Users/thenk83/Desktop/PythonCode/vlan_database.txt')
value_list = ['1']
df = df[df.switch_id.isin(value_list)]
for i in range(len(df)):
vlan_num = df.iloc[i,1]
vlan_name = df.iloc[i,2]
int_vlan = df.iloc[i,3]
int_vlan_ip = df.iloc[i,4]
int_vlan_mask = df.iloc[i,5]
print(vlan_num,vlan_name,int_vlan,int_vlan_ip,int_vlan_mask)
Вероятно, это не самый чистый способ сделать это, но пока он будет работать. Но это дает мне это:
(20, 'Legal', 20, '192.168.20.1', '255.255.255.0')
(21, 'HumanResources', 21, '192.168.21.1', '255.255.255.0')
(22, 'Finance', 22, '192.168.22.1', '255.255.255.0')
(23, 'Facilities', 23, '192.168.23.1', '255.255.255.0')
(24, 'InformationTechnology', 24, '192.168.24.1', '255.255.255.0')
(25, 'Engineering', 25, '192.168.25.1', '255.255.255.0')
И это именно то, что я хотел!
Ответ №3:
Поскольку вы не выполняете никаких математических или статистических операций с вашими данными, почему бы вам не использовать csv
модуль. Например, на основе вашего кода:
Input_file.csv
switch_id,vlan_num,vlan_desc,int_vlan,int_vlan_ip,int_vlan_mask
1,20,Legal,20,192.168.20.1,255.255.255.0
1,21,HumanResources,21,192.168.21.1,255.255.255.0
2,20,Legal,20,192.168.20.2,255.255.255.0
2,21,HumanResources,21,192.168.21.2,255.255.255.0
Answer.py
import csv
input_file_name = "Input_file.csv"
with open(input_file_name, newline='') as input_file:
csv_reader = csv.DictReader(input_file)
for row in csv_reader:
print(row['vlan_num'],
row['vlan_desc'],
row['int_vlan'],
row['int_vlan_ip'],
row['int_vlan_mask'])