Редактирование кода для запроса фрейма данных 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
Может ли модератор отредактировать мои выходные данные фрейма данных, если это нормально ?
Я привел их в порядок, но они все еще не отображаются правильно.
Любая помощь будет очень признательна
С уважением
Эдди Лебедки
Что я уже пробовал:
Как описано в разделе Описание проблемы.