pandas Python:如何从现有数组中为for循环的每次迭代分配列标题

dgsult0t  于 2023-01-11  发布在  Python
关注(0)|答案(2)|浏览(106)

我是一个初学者,我有一个静态数组,我想从这个数组中连续地取出变量,并将它们作为列标题赋给for循环的每一次迭代。例如,在第一次循环之后,将col_titles中的第一个变量赋给列标题。在第二次循环之后,将col_titles中的第二个变量赋给列标题,以此类推。下面是我目前所做的工作:

data = []

col_titles = ['30024`, '30033', '30038']

urls = [
'https://www.example.com/page1',
'https://www.example.com/page2',
'https://www.example.com/page3
]

counter = 1

for url in urls:
    driver.get(url)
    h2s = driver.find_elements(By.TAG_NAME, 'h2')
    try:
        for h2 in h2s:
            if counter <= 5:
                data.append(h2.get_attribute("innerText"))
                counter = counter + 1        
    except (ElementNotVisibleException, NoSuchElementException):
        data.append("None")
    driver.close()    

print(data)

目前,输出是一个数组,包含每个循环中的所有变量,如so(每个h2反映每个url中唯一的h2标题):

[h2, h2, h2, h2, h2, h2, h2, h2, None, None, h2, h2, h2, h2, None]

这很好,因为我所做的只是将每次迭代追加到“data”数组。
"这就是我被困住的地方"
我想我应该在for循环中创建一个DataFrame,以便从“col_titles”数组中获取列标题,并将其指定为for循环每次迭代之后(或之前)的列标题,但我不知道如何正确地执行此操作,我希望获得如下输出:

30024   30033   30038
h2      h2      h2
h2      h2      h2
h2      h2      h2
h2      None    h2
h2      None    None

任何见解都非常赞赏!

plicqrtu

plicqrtu1#

使用collections.defaultdict和zip函数。
要获得结果,然后将其作为列/值传递给PandasDataFrame,在您的情况下使用类似于字典的数据结构会更方便。
代替data = []初始化:

from collections import defaultdict

data = defaultdict(list)

然后迭代urls,分别累加每个 * 列 * 的值:

for col, url in zip(*[col_titles, urls]): 
    driver.get(url)
    h2s = driver.find_elements(By.TAG_NAME, 'h2')
    try:
        for h2 in h2s:
            if counter <= 5:
                data[col].append(h2.get_attribute("innerText"))
                counter = counter + 1        
    except (ElementNotVisibleException, NoSuchElementException):
        data[col].append("None")
    driver.close()

最后,当生成pd.DataFrame(data)的 Dataframe 时,您将得到如下所示的结构:

30024 30033 30038
0    h2    h2    h2
1    h2    h2    h2
2    h2    h2    h2
3    h2    h2    h2
4  None  None  None
bvjxkvbb

bvjxkvbb2#

首先创建字典,从col_titles添加键,从每次迭代中赋值,得到一个列表,然后将字典压缩到 Dataframe -代码如下所示-

col_titles = ['30024`, '30033', '30038']

urls = [
'https://www.example.com/page1',
'https://www.example.com/page2',
'https://www.example.com/page3
]

counter = 1
ctr = 0
my_dict={}

for url in urls:
    driver.get(url)
    h2s = driver.find_elements(By.TAG_NAME, 'h2')
    data = []
    try:
        for h2 in h2s:
            if counter <= 5:
                data.append(h2.get_attribute("innerText"))
                counter = counter + 1 
    except (ElementNotVisibleException, NoSuchElementException):
        data.append("None")
    driver.close()    
    ctr = ctr + 1 
    my_dict[col_titles[ctr]] = data
df = pd.DataFrame(my_dict)
print(df)

相关问题