如何将多个“ for”循环的结果保存到数据框中?

时间:2019-05-24 07:13:37

标签: python python-3.x pandas for-loop beautifulsoup

如何将不同的for循环的输出添加到一个数据帧中。例如,我从网站上抓取了数据,并使用循环列出了姓名,电子邮件和电话号码。我想将所有输出添加到单个数据框中的表中。 我能够做到一个循环,但不能多个循环。 请查看代码并在附带的图像中输出。

通过从for循环中删除Zip,可以解决该错误。 “无法解压的值太多”

  1. 循环
phone = soup.find_all(class_ = "directory_item_phone directory_item_info_item")
for phn in phone:
    print(phn.text.strip())
##Output - List of Numbers
  1. df的代码
df = list()
for name,mail,phn in zip(faculty_name,email,phone):
    df.append(name.text.strip())
    df.append(mail.text.strip())
    df.append(phn.text.strip())
df = pd.DataFrame(df)
df

For loops Code and Output for df

2 个答案:

答案 0 :(得分:0)

尝试一下

data = {'name':[name.text.strip() for name in faculty_name],
        'mail':[mail.text.strip() for mail in email],
        'phn':[phn.text.strip() for phn in phone],}

df = pd.DataFrame.from_dict(data)

答案 1 :(得分:0)

创建pandas.DataFrame的有效方法是先创建字典,然后将其转换为DataFrame。

您可能会这样做:

import pandas as pd

D = {'name': [], 'mail': [], 'phone': []}

for name, mail, phn in zip(faculty_name, email, phone):
    D['name'].append(name.text.strip())
    D['mail'].append(mail.text.strip())
    D['phone'].append(phn.text.strip())

df = pd.DataFrame(D)

另一种具有lambda函数的方式:

import pandas as pd

text_strip = lambda s : s.text.strip()

D = {
        'name': list(map(text_strip, faculty_name)),
        'mail': list(map(text_strip, email)),
        'phone': list(map(text_strip, phone))
        }

df = pd.DataFrame(D)

如果列表的长度不一样,则可以尝试使用此方法(但我不确定这是非常有效的):

import pandas as pd

columns_names = ['name', 'mail', 'phone']
all_lists = [faculty_name, email, phone]

max_lenght = max(map(len, all_lists))  
D = {c_name: [None]*max_lenght for c_name in columns_names}

for c_name, l in zip(columns_names , all_lists):
    for ind, element in enumerate(l):
        D[c_name][ind] = element

df = pd.DataFrame(D)