2017-04-13 9 views
0

これは私のコードです。forループ内のすべてのデータフレームを1つのdataframeに結合する必要があります。また、データフレームをCSVファイルに書き込む必要があります。どのように私はすべての私のデータフレームを1つのデータフレームにforループの1つ後にヘッダーなしで参加できますか?

私はあなたが to_csvによってファイルに、ループ内で read_htmlを使用 listに出力を追加し、 concatによって最終 DataFrameを作成し、最後の書き込みができると信じて
import urllib 
from bs4 import BeautifulSoup 
import pandas as pd 

for i in range(2,636): 
    soup = BeautifulSoup(urllib.urlopen("https://www.wisdomjobs.com/core-java- 
    jobs-" + str(i), "lxml").read()) 
    #print soup 
    all_tables = soup.find_all('table') 
    #print all_tables 
    A=[] 
    B=[] 
    C=[] 
    for right_table in all_tables: 
    for row in right_table.findAll("tr"): 
     cells = row.findAll('td') 
     states=row.findAll('th') #To store second column data 
     if len(cells)==3: #Only extract table body not heading 
      A.append(cells[0].find(text=True)) 
      B.append(cells[1].find(text=True)) 
      C.append(cells[2].find(text=True)) 
    #print "\n Generate lists ", A, B, C 
    df = pd.DataFrame(A, columns=["Company and Job Title"]) 
    df["Location"] = B 
    df['Posted On'] = C 
    df 
    #print '\n table', df 
    #df.to_csv('core_java2.csv') 
    with open('foo.csv', 'a') as f: 
    pd.concat([df], axis=1).to_csv(f, header=False) 
+0

誰か助けてください – joe

+0

'pd.concat'を試しましたか?あなたの正確な問題は何ですか?この例は非常に複雑すぎます。それを減らしてください。 – languitar

+0

私のコードは複数のデータフレームを提供しています。私は1つのデータフレーム – joe

答えて

0

dfs = [] 
for i in range(2,636): 
    df = pd.read_html('https://www.wisdomjobs.com/core-java-jobs-' + str(i))[1] 
    dfs.append(df) 

df = pd.concat(dfs, ignore_index=True) 
print (df.head()) 


df.to_csv('foo.csv') 

ソリューションの追記を変更する必要がある場合dfループ内listおよび最後concat

dfs = [] 
for i in range(2,636): 
    soup = BeautifulSoup(urllib.urlopen("https://www.wisdomjobs.com/core-java- 
    jobs-" + str(i), "lxml").read()) 
    #print soup 
    all_tables = soup.find_all('table') 
    #print all_tables 
    A=[] 
    B=[] 
    C=[] 
    for right_table in all_tables: 
    for row in right_table.findAll("tr"): 
     cells = row.findAll('td') 
     states=row.findAll('th') #To store second column data 
     if len(cells)==3: #Only extract table body not heading 
      A.append(cells[0].find(text=True)) 
      B.append(cells[1].find(text=True)) 
      C.append(cells[2].find(text=True)) 
    #print "\n Generate lists ", A, B, C 
    df = pd.DataFrame(A, columns=["Company and Job Title"]) 
    df["Location"] = B 
    df['Posted On'] = C 
    dfs.append(df) 
    #print '\n table', df 
    #df.to_csv('core_java2.csv') 

df = pd.concat(dfs, ignore_index=True) 
print (df.head()) 

df.to_csv('foo.csv') 
関連する問題