遍历数据框列和循环变量

时间:2019-04-06 04:28:50

标签: python pandas loops dataframe

我是Python新手,请原谅。回到我接触PHP / MySQL时。我可以根据任何参数遍历一个表。让我们简单说一下ID。找到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 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:0)

经过反复试验,我发现了这一点。我最终使用了“ .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')

而这正是我想要的!

答案 2 :(得分:0)

由于您没有对数据进行任何数学或统计运算,所以为什么不使用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'])