根据同一数据框中另一列内容的条件,在数据框中添加新列

Soumya Pandey
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}

def scrap_hrefs(url,baseUrl):
    resp = requests.get(url, headers= header)
    respData = BeautifulSoup(resp.content, 'html.parser')     
    allHrefs = respData.select('[href]')
    
    return allHrefs, baseUrl
    
    
def get_hrefs(allHrefs, baseUrl):
    for i in range(0,len(allHrefs)):
        if allHrefs[i]['href'].startswith('/'):
            allHrefs[i]= baseUrl + allHrefs[i]['href']
        else:
            allHrefs[i]= allHrefs[i]['href']
            
    return allHrefs

def clean_hrefs(allHrefs): 
    links = {'links' : allHrefs}
    df = pd.DataFrame(links).drop_duplicates()
    df = df[df['links'].str.contains('financial|investors|investor|Investors|Investor|INVESTORS|INVESTOR|relations|relation|Relations|Relation|report|filings|news|media')]
    for i in range(0,len(df)):
        if df[i]['links'].str.find('financial|investors|investor|Investors|Investor|INVESTORS|INVESTOR|relations|relation|Relations|Relation|report|filings')!= -1:
            df[i]['segments'] = df['Finance']
        else:
            continue
    
    return df
    
def store_hrefs(df):       
    df.to_csv("testing.csv", index=False)
   
    
def run_scraper(url,baseUrl) :
    store_hrefs(clean_hrefs(get_hrefs(*scrap_hrefs(url, baseUrl))))
     
    
run_scraper('https://www.example.com/','https://www.example.com')

在clean_hrefs()函数中,我想从数据框中获取第一个链接,检查其内容是否包含单词“ finance,投资者,ir,报告,文件”。如果是这样,请创建另一个名为“段”的列,并将其分配为ID“ FINANCE”。但这给出了错误。KeyError:0任何帮助将不胜感激!

耶斯列尔

您可以通过掩码将列设置为另一列,类似于过滤,如果没有匹配项会丢失值:

mask = df['links'].str.contains('financial|investors|investor|Investors|Investor|INVESTORS|INVESTOR|relations|relation|Relations|Relation|report|filings')
df.loc[mask, 'segments'] = 'Finance'

像这样工作:

df['segments'] = np.where(mask, 'Finance', np.nan)

编辑:

如果要设置多个值,则可以在字典中指定新值,然后按如下所示设置列segments

d = {'INVESTOR':'financial|investors|investor|Investors|Investor|INVESTORS|INVESTOR|relations|relation|Relations|Relation|report|filings',
     'NEWS':'news|media'}

for k, v in d.items():
    df.loc[df['links'].str.contains(v, na=False), 'segmentID'] = k

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据一列中的条件在数据框中创建新变量,从另一列中提取?(dplyr)

如何基于同一数据的子集在数据框中创建新列

根据某些条件在数据框中添加一列?

python根据另一列的条件在数据框中添加行

根据同一数据框中另一列的值对2列的值进行计数或求和

根据同一数据框的另一列更新分数列

根据另一列在数据框中删除一列

根据同一数据框内另一列中的值替换数据框列中的值

如何根据特定条件在数据框熊猫中的列上添加一列

根据条件在数据框列中更改值,在另一列中更改值

如何根据另一列的某些条件在数据框中添加列?

根据同一数据框另一列中的字符将文本列添加到数据框

在数据框中添加另一列以根据日期过滤出每月的星期

根据R中的另一数据框替换一列中的值

快速搜索熊猫数据框并根据条件在数据框的另一列中插入值

根据同一数据框的另一列绘制一个列

根据Python中的多个条件,将一列从多个数据框合并到另一数据框

从同一数据框中另一列的值派生列

根据同一数据集中另一列中的值过滤数据绑定组合框

熊猫:根据另一个数据框中的值在数据框中添加新列

根据熊猫中另一列上的值在数据框中创建一个新列

将同一数据框中的一列除以另一列时出错

如何根据同一数据框中另一列的值替换数据框中的值?

根据一列中的条件创建一个新的熊猫列,并从同一数据框中的多列中分配值

如何根据同一数据框中另一列的值替换数据框中列中的 NaN 值

如何根据另一列中满足的条件在熊猫数据框中添加新列?

在数据框中创建基于条件和另一列值的新列

如何使用python根据同一数据框中另一列的值对数据框中列中的值进行排序

如何根据另一个数据框中的条件在数据框中创建新列?