如何将不同的for循环的输出添加到一个数据帧中。例如,我从网站上抓取了数据,并使用循环列出了姓名,电子邮件和电话号码。我想将所有输出添加到单个数据框中的表中。 我能够做到一个循环,但不能多个循环。 请查看代码并在附带的图像中输出。
通过从for循环中删除Zip,可以解决该错误。 “无法解压的值太多”
phone = soup.find_all(class_ = "directory_item_phone directory_item_info_item")
for phn in phone:
print(phn.text.strip())
##Output - List of Numbers
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
答案 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)