我试图从Python脚本中获取数据,并将其存储到一个列表中,然后从中创建一个数据帧
但它为for循环中的单个项创建了不同的Datafarme,如何避免这种情况,并创建一个单独的dataFrame
代码:
from __future__ import (absolute_import, division, print_function)
import getpass
import ssl
from pyVim.connect import SmartConnect
from pyVmomi import vim
from ssl import CERT_NONE, PROTOCOL_TLSv1_2, SSLContext
import pandas as pd
import numpy as np
from tabulate import tabulate
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('max_colwidth', None)
pd.set_option('expand_frame_repr', False)
s = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
s.verify_mode = ssl.CERT_NONE
userid = input("please enter your wbi userid (ex. abx@example.com):")
p = getpass.getpass("password:")
vcenter = ["vcenter-oracle.com","vcente.simplivity.com"]
for instance in vcenter:
try:
c = SmartConnect(host=instance, user=userid, pwd=p, sslContext=s)
except Exception as e:
print(e)
continue
content = c.content
obj_ds = content.viewManager.CreateContainerView(content.rootFolder,[vim.Datastore],True)
# Lists
a_list = []
b_list = []
c_list = []
d_list = []
# for loop
for z in obj_ds.view:
a_list.append(instance)
b_list.append(z)
c_list.append(int(z.summary.capacity/(1024*1024*1024)))
d_list.append(int(z.summary.freeSpace/(1024*1024*1024)))
#dataframe
df = pd.DataFrame({'A': a_list, 'B': b_list, 'C': c_list, 'D': d_list})
对于for循环部分,我也尝试了以下方法,但结果相同:
raw_data = []
for z in obj_ds.view:
vc_data = instance, z, int(z.summary.capacity/(1024*1024*1024)) ,int(z.summary.freeSpace/(1024*1024*1024))
raw_data.append(vc_data)
df = pd.DataFrame(raw_data, columns=['Vcenter', 'DS', 'TDS', 'FDS'])
print(df)
输出:
A B C D
0 vcenter-oracle.com 'vim.Datastore:datastore-357' 439 430
1 vcenter-oracle.com 'vim.Datastore:datastore-311' 439 430
2 vcenter-oracle.com 'vim.Datastore:datastore-306' 439 430
3 vcenter-oracle.com 'vim.Datastore:datastore-262' 20480 7030
4 vcenter-oracle.com 'vim.Datastore:datastore-356' 439 430
5 vcenter-oracle.com 'vim.Datastore:datastore-465' 52 46
6 vcenter-oracle.com 'vim.Datastore:datastore-94' 5836 1850
7 vcenter-oracle.com 'vim.Datastore:datastore-122' 11646 3592
8 vcenter-oracle.com 'vim.Datastore:datastore-89' 52 46
9 vcenter-oracle.com 'vim.Datastore:datastore-83' 52 46
10 vcenter-oracle.com 'vim.Datastore:datastore-149' 52 46
A B C D
0 vcenter.simplivity.com 'vim.Datastore:datastore-143230' 1945 501
1 vcenter.simplivity.com 'vim.Datastore:datastore-52354' 5120 2096
2 vcenter.simplivity.com 'vim.Datastore:datastore-142927' 274 271
3 vcenter.simplivity.com 'vim.Datastore:datastore-143231' 2048 987
4 vcenter.simplivity.com 'vim.Datastore:datastore-878' 553 549
5 vcenter.simplivity.com 'vim.Datastore:datastore-877' 553 552
6 vcenter.simplivity.com 'vim.Datastore:datastore-74327' 1500 949
7 vcenter.simplivity.com 'vim.Datastore:datastore-142929' 274 271
8 vcenter.simplivity.com 'vim.Datastore:datastore-708' 4677 1933
期望值:
A B C D
0 vcenter-oracle.com 'vim.Datastore:datastore-357' 439 430
1 vcenter-oracle.com 'vim.Datastore:datastore-311' 439 430
2 vcenter-oracle.com 'vim.Datastore:datastore-306' 439 430
3 vcenter-oracle.com 'vim.Datastore:datastore-262' 20480 7030
4 vcenter-oracle.com 'vim.Datastore:datastore-356' 439 430
5 vcenter-oracle.com 'vim.Datastore:datastore-465' 52 46
6 vcenter-oracle.com 'vim.Datastore:datastore-94' 5836 1850
7 vcenter-oracle.com 'vim.Datastore:datastore-122' 11646 3592
8 vcenter-oracle.com 'vim.Datastore:datastore-89' 52 46
9 vcenter-oracle.com 'vim.Datastore:datastore-83' 52 46
10 vcenter-oracle.com 'vim.Datastore:datastore-149' 52 46
11 vcenter.simplivity.com 'vim.Datastore:datastore-143230' 1945 501
12 vcenter.simplivity.com 'vim.Datastore:datastore-52354' 5120 2096
13 vcenter.simplivity.com 'vim.Datastore:datastore-142927' 274 271
14 vcenter.simplivity.com 'vim.Datastore:datastore-143231' 2048 987
15 vcenter.simplivity.com 'vim.Datastore:datastore-878' 553 549
16 vcenter.simplivity.com 'vim.Datastore:datastore-877' 553 552
17 vcenter.simplivity.com 'vim.Datastore:datastore-74327' 1500 949
18 vcenter.simplivity.com 'vim.Datastore:datastore-142929' 274 271
19 vcenter.simplivity.com 'vim.Datastore:datastore-708' 4677 1933
正如前面的回答中所提到的,您需要在第一个循环之前声明列表构造,就像在每次实例更改之后,
raw_data
重新初始化为空列表一样,几乎不需要做任何调整试试下面,它应该适合你
代码中有两个for循环,您在第一个循环中初始化dataframe,这会导致您的情况,即为每个实例生成一个新的dataframe。您需要在第一个循环之前或在第一个循环之外初始化数据帧以获得单个数据帧
以下是更正后的代码:
希望这有所帮助
相关问题 更多 >
编程相关推荐