Eddie Winch Ответов: 0

Редактирование кода для запроса фрейма данных pandas


Привет,

Я использую следующую строку кода для получения вывода фрейма данных с помощью Pandas :-

<pre>import pandas as pd
import requests
from bs4 import BeautifulSoup
import numpy as np
import datetime as dt
class work:
    def __init__(self,link):
        self.link=link
        self.res=requests.get(self.link)
        self.soup=BeautifulSoup(self.res.content, "lxml")
        self.table = self.soup.find_all('table')[0]
        self.l = pd.read_html(str(self.table))
 
         
    def create(self):
        self.ll=[]
        for i in range(0,6):
            l1=self.l[1][0:1][i]
            l1=list(l1)
            self.ll.extend(l1)
        l2=self.l[1][2:]
        self.date=list(l2[0])
        self.location=list(l2[1])
        self.lancaster=list(l2[2])
        self.spitfire=list(l2[3])
        self.hurricane=list(l2[4])
        self.dakota=list(l2[5])
         
    def month(self):
        mm=self.l[1][1][1]
         
        if mm=='May':
            x=5
        elif mm=='June':
            x=6
        elif mm=='July':
            x=7
        elif mm=='August':
            x=8
        elif mm=='September':
            x=9
        else:
            x=0
        return x
             
 
         
         
         
    def refine(self):
        self.create()
        arr=np.asarray(self.date)
        temp=arr[0]
        for i in range(0,len(arr)):
            if arr[i]=='nan':
                arr[i]=temp
         
            else:
                temp=arr[i]
        self.y=list(arr)
        return self.y
    def convert(self):
        lx=[]
        x=self.refine()
        y=self.month()
        for i in range(0,len(x)):
            lx.append((dt.datetime(2006, y, int(x[i]))).strftime('%d-%b-%Y'))
        return lx
     
    def post(self):
        date=self.convert()
        dff = pd.DataFrame(list(zip(date,self.location,self.lancaster,self.spitfire,self.hurricane,self.dakota)), 
               columns =self.ll)
        return dff
         
         
         
#a=work('http://web.archive.org/web/20050726230748/http://www.raf.mod.uk/bbmf/may05.html')
#b=work('http://web.archive.org/web/20050726230748/http://www.raf.mod.uk/bbmf/june05.html')
#c=work('http://web.archive.org/web/20050726230748/http://www.raf.mod.uk/bbmf/july05.html')
#d=work('http://web.archive.org/web/20050726230748/http://www.raf.mod.uk/bbmf/august05.html')
#e=work('http://web.archive.org/web/20050726230748/http://www.raf.mod.uk/bbmf/september05.html')  
 
a=work('http://web.archive.org/web/20060811232523/http://www.deltaweb.co.uk/bbmf/may06.html')
b=work('http://web.archive.org/web/20060811232523/http://www.deltaweb.co.uk/bbmf/june06.html')
c=work('http://web.archive.org/web/20060811232523/http://www.deltaweb.co.uk/bbmf/july06.html')
d=work('http://web.archive.org/web/20060811232523/http://www.deltaweb.co.uk/bbmf/august06.html')
e=work('http://web.archive.org/web/20060811232523/http://www.deltaweb.co.uk/bbmf/september06.html')  
 
#a=work('http://web.archive.org/web/20070701133815/http://www.bbmf.co.uk/may07.html')
#b=work('http://web.archive.org/web/20070701133815/http://www.bbmf.co.uk/june07.html')
#c=work('http://web.archive.org/web/20070701133815/http://www.bbmf.co.uk/july07.html')
#d=work('http://web.archive.org/web/20070701133815/http://www.bbmf.co.uk/august07.html')
#e=work('http://web.archive.org/web/20070701133815/http://www.bbmf.co.uk/september07.html')  
 
#a=work('http://web.archive.org/web/20081116021904/http://www.bbmf.co.uk/may08.html')
#b=work('http://web.archive.org/web/20081116021904/http://www.bbmf.co.uk/june08.html')
#c=work('http://web.archive.org/web/20081116021904/http://www.bbmf.co.uk/july08.html')
#d=work('http://web.archive.org/web/20081116021904/http://www.bbmf.co.uk/august08.html')
#e=work('http://web.archive.org/web/20081116021904/http://www.bbmf.co.uk/september08.html')  
 
dff1=a.post()
dff2=b.post()
dff3=c.post()
dff4=d.post()
dff5=e.post()
 
X = pd.concat([dff1, dff2], axis=0)
Y = pd.concat([X, dff3], axis=0)
Z =  pd.concat([Y, dff4], axis=0)
F =  pd.concat([Z, dff5], axis=0)
F=pd.DataFrame(F)
display = F[(F['Location'].str.contains('- Display')) & (F['Dakota'].str.contains('D')) & (F['Spitfire'].str.contains('S', na=True)) & (F['Lancaster'] != 'L')]  
 
#Months = May Jun Jul Aug Sep
#Months = -05- -06- -07- -08- -09-   #('[a-zA-Z]')) or #('- Display')) or  #('- Display|Win'))
 
#display = F[(F['Location'].str.contains('[a-zA-Z]')) & (F['Date'].str.contains('Jul')) & (F['Dakota'].str.contains('D')) & (F['Spitfire'].str.contains('S', na=True)) & (F['Lancaster'] != 'L')]  
 
pd.options.display.max_rows = 1000   
pd.options.display.max_columns = 1000
display.drop('Lancaster', axis=1, inplace=True)
display=display.dropna(subset=['Spitfire', 'Hurricane'], how='all')
#display=display[['Date','Location','Dakota','Hurricane','Spitfire']]
display=display[['Location','Date','Dakota','Hurricane','Spitfire']]
display=display.fillna('--')
display.loc[86,'Location']='Windermere - Display'   #'Windermere Air Show'
display.reset_index(drop=True, inplace=True)
display.to_csv(r'C:\Users\Edward\Desktop\BBMF Schedules And Master Forum Thread Texts\BBMF-2006-Code (Dakota With Fighters).csv')
display


Я выполняю Поиск дисплеев только сейчас для выходного фрейма данных, поэтому при фильтрации строк я использую следующую строку кода :-

display = F[(F['Location'].str.contains('- Display'))


И я также изменил строку с надписью "авиасалон Уиндермира" на "Уиндермир - дисплей" для этого ряда,

используя следующую строку кода :-

display.loc[86,'Location']='Windermere - Display'


Однако в выходных данных, когда я запускаю свой код, все строки - Display показывают только то, что правильно, но

Строка Windermere - Display показывает следующее: :-

Windermere - Display	NaN	NaN	NaN	NaN


Нужно ли мне, чтобы поставить inplace=True как часть дисплея.loc строка кода, для отображения данных в строке ? И если да, то что должна читать строка, когда она включена ? А если нет, то какие изменения мне нужно внести ?

Я попытался переместить позицию этой строки кода .loc в полном коде в другие позиции, но это не имело никакого значения, и я все еще получаю значения столбцов как NaN в моем выводе. Номер позиции индекса " 86 " является правильным, так что неправильное число для этого не является проблемой.

Если я использую следующую строку кода :-

F[(F['Location'].str.contains('- Display|Win'))


Я получаю правильный вывод фрейма данных, с помощью строки Windermere - Display, правильно отображаемой в
правильное положение. Но я хотел бы получить вывод фрейма данных, который я хочу, не включая |Win в эту строку кода, если это возможно. Если бы кто-то мог указать мне, какие изменения мне нужно сделать, чтобы достичь этого, я был бы очень благодарен.

Я хотел бы знать, почему строка кода с |Win in показывает строку Windermere - Display в правильном положении в выходном фрейме данных ? Но когда я использую тот, у которого есть только - Display in, строка Windermere - Display отображается в нижней части выходного фрейма данных, все со значениями NaN в столбце, как даже перемещение .одна строка кода, несколько строк вверх по полному коду, не имеет значения ?

Ниже приведен вывод фрейма данных, который я получаю, когда использую строку кода |Win, которая является правильным выводом :-

Location	          Date	   Dakota   Hurricane	Spitfire
0	Woodspring Wings - Display	01-Jul-2006	D	H	S
1	Duxford Flying Legends - Display 08-Jul-2006	D	H	S
2	RAF Odiham - Display	        27-Jul-2006	D	--	S
3	East Fortune - Display	        29-Jul-2006	D	H	S
4	Windermere - Display	        30-Jul-2006	D	H	S
5	Whitby Carnival - Display	12-Aug-2006	D	--	S
6	Weymouth Carnival - Display	16-Aug-2006	D	H	S
7	Dawlish Carnival - Display	17-Aug-2006	D	H	S
8	Elvington - Display	        19-Aug-2006	D	H	S
9	Elvington - Display	        20-Aug-2006	D	H	S
10	Twinwoods - Display	        27-Aug-2006	D	--	S
11	Bodelwyddan Castle - Display	28-Aug-2006	D	--	S



И вот что я получаю, когда использую строку кода - Display :-

Location	           Date	    Dakota   Hurricane	Spitfire
0	Woodspring Wings - Display	01-Jul-2006	D	H	S
1	Duxford Flying Legends - Display 08-Jul-2006	D	H	S
2	RAF Odiham - Display	        27-Jul-2006	D	--	S
3	East Fortune - Display	        29-Jul-2006	D	H	S
4	Whitby Carnival - Display	12-Aug-2006	D	--	S
5	Weymouth Carnival - Display	16-Aug-2006	D	H	S
6	Dawlish Carnival - Display	17-Aug-2006	D	H	S
7	Elvington - Display	        19-Aug-2006	D	H	S
8	Elvington - Display	        20-Aug-2006	D	H	S
9	Twinwoods - Display	        27-Aug-2006	D	--	S
10	Bodelwyddan Castle - Display	28-Aug-2006	D	--	S
11	Windermere - Display	              NaN	NaN	NaN	NaN



Может ли модератор отредактировать мои выходные данные фрейма данных, если это нормально ?

Я привел их в порядок, но они все еще не отображаются правильно.

Любая помощь будет очень признательна

С уважением

Эдди Лебедки

Что я уже пробовал:

Как описано в разделе Описание проблемы.

0 Ответов