2017-10-01 14 views
0

これは前に尋ねられているか、これには本当に簡単な答えがあると確信していますが、これをトラブルシューティングして正確な問題を発見しています。データフレームにリストを追加するときに空のデータフレーム

私は基本的にテーブル(実際にはHTMLから作成されたテキストドキュメントからデータを取っている)を掻き集める次のコードを持っています。私は本質的にテーブルの正確なレプリカを作成しようとしています。 inner forループは、最初の行からリストを作成し、それをpandasデータフレームに追加してから2番目の行に移動し、リストの値を新しい行の値に置き換えて繰り返します。

from bs4 import BeautifulSoup # imports BeautifulSoup 
import pandas # imports pandas 
#df=pandas.Dataframe("listname") 

#Imports the text file and saves it as a variable 
def read_file(): 
    file = open('Detroit.txt') 
    data = file.read() 
    file.close() 
    return data 

#Converts the text file into something the 
soup = BeautifulSoup(read_file(),'lxml') 

tables = soup.find_all(class_="overthrow table_container") #Creates a resutset that will show all of the tables with this class name 
find_table = tables[2].tbody #creates a tag element from the desired table and highlights the tbody section 
rows = find_table.find_all("tr") #creates another resultset signle out the elements with a tr tag. 

list_of_rows = [] 
df = pandas.DataFrame() 

for j in range(len(rows)): 
    row_finder = rows[j] 
    tag_row = row_finder.find_all("td") 
    for i in range(len(tag_row)): 
     list_of_rows.insert(i,tag_row[i].get_text()) 
    df.append(list_of_rows,ignore_index=True) 

print(df) 

問題は、私がデータフレームを印刷するに行くとき、私はこの結果を得る

Empty DataFrame 
Columns: [] 
Index: [] 

であり、私は理由を理解することはできません。

+0

'df.append(list_of_rows、ignore_index = True)'が実際に実行され、 'list_of_rows'に興味深いコンテンツがあると確信していますか? 'print'か' pdb.set_trace() 'を使います。 –

+0

私はprint(df)をprint(list_of_rows)に切り替えて、基本的にテーブル全体を逆順で表示しました。新しい値が置き換えられるのではなく、最初に置かれていることとおそらく関係しています。だから、これは私が思うように動作していないようです。 – jon

答えて

2
df = df.append(list_of_rows,ignore_index=True) 

代わりに新しいdfを返します。

関連する問題