Цикл по столбцам данных и переменным цикла - PullRequest
1 голос
/ 06 апреля 2019

Я новичок в 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, но это не одно и то же.Так что я запутался, как это сделать.

Я бы предпочел ничего сложного.Как можно проще было бы здорово, если бы вы могли мне помочь.Я хотел бы понять.

Ответы [ 3 ]

1 голос
/ 06 апреля 2019

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'])
0 голосов
/ 09 апреля 2019

Поскольку вы не выполняете никаких математических или статистических операций с вашими данными, почему бы вам не использовать модуль 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'])
0 голосов
/ 06 апреля 2019

Я понял это после нескольких проб и ошибок.В итоге я использовал «.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')

И это именно то, что я хотел!

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