Чтобы все заработало, создайте в начале emtpy-фрейм данных
final_df = pd.DataFrame()
и добавьте к нему позже
final_df = final_df.append(dict_for_df)
Полный код:
import pandas as pd
from bs4 import BeautifulSoup
import glob
import os.path
counter = 0
final_df = pd.DataFrame()
dir_path = r"/home"
for file_name in glob.glob(os.path.join(dir_path, "*.html")):
with open(file_name) as html_file:
soup = BeautifulSoup(html_file)
counter = counter+1
text = []
vessel_name = []
port = []
voy_no = []
for p_tag in soup.find_all('p', {'class' : 'MsoNormal'}):
text.append(p_tag.text)
text1 = [el.replace('\xa0',' ') for el in text]
a = text1[2].split(":")[1]
vessel_name.append((list(a.split())))
b = text1[4].split(":")[1]
voy_no.append((b.split()))
c = text1[5].split(":")[1]
port.append((c.split()))
dict_for_df = {'Vessel_Name':vessel_name, 'Voy_No':voy_no, 'Port':port}
final_df = final_df.append(dict_for_df)
Обратите внимание, что это не лучший способ сделать это.Если ваши данные помещаются в память, лучше собрать все данные в список каталогов и создать кадр данных в конце.Для небольшого набора данных из 1000 строк или меньше этого должно быть достаточно.