首页 > 解决方案 > 如何从多个列表中创建一列?

问题描述

每当我发布以下代码时,输​​出都是一组列表,但是如何将它们组织成一列?

# Import libraries
from bs4 import BeautifulSoup
import requests
import pandas as pd
import numpy as np

#Get URL and extract content
class Scraper():
page=1
traits = []
while page != 10:
    content = requests.get('https://raw.githubusercontent.com/recklesslabs/wickedcraniums/main/{}'.format(page))
    soup = BeautifulSoup(content.text, 'html.parser')
    page = page + 1
    
    dic_list = list(map(eval, soup))
    for dic in dic_list:
        traits = dic["attributes"]

    df = pd.DataFrame.from_dict(traits, orient='columns').to_numpy()
    df1 = list(np.concatenate(df[0:1]))
    
    print(df1)

当我使用上面的代码时,我得到这个输出:

['Background', 'Zeus']
['Background', 'BlueWhale']
['Background', 'ViolentViolet']
['Background', 'MardiGras']
['Background', 'WoodBark']
['Background', 'ViolentViolet']
['Background', 'MidnightExpress']
['Background', 'Maire']
['Background', 'Pohutukawa']

如何只制作一列列出所有背景,使其看起来像这样:

    Background
0   Zeus
1   BlueWhale
2   ViolentViolet
3   MardiGras
4   WoodBark
5   ViolentViolet
6   MidnightExpress
7   Maire
8   Pohutukawa

除了上述内容之外,我还将如何查找每个项目的计数,使其显示为:

Background
Zeus - 1
BlueWhale - 1
ViolentViolet - 2
MardiGras - 1
WoodBark - 1
MidnightExpress - 1
Maire - 1
Pohutukawa - 1

标签: pythonpandasnumpy

解决方案


# Import libraries
from bs4 import BeautifulSoup
import requests
import pandas as pd
import numpy as np


backgrounds = []

#Get URL and extract content
class Scraper():
    page = 1
    traits = []
    

    while page != 10:
        content = requests.get('https://raw.githubusercontent.com/recklesslabs/wickedcraniums/main/{}'.format(page))
        soup = BeautifulSoup(content.text, 'html.parser')
        page = page + 1
        
        dic_list = list(map(eval, soup))
        for dic in dic_list:
            traits = dic["attributes"]

        # df = pd.DataFrame(traits)
        df = pd.DataFrame.from_dict(traits)
        df = df[df['trait_type']=='Background']

        backgrounds.append(df['value'].values[0])

df = pd.DataFrame({'Backgrounds': backgrounds})
l1 = df['Backgrounds']
print(l1)

value_counts = df['Backgrounds'].value_counts()
l2 = [f"{key} - {value_counts[key]}" for key in value_counts.keys()]
print(l2)
       

推荐阅读