2016-11-05 17 views
5

Tôi đang truy xuất một số nội dung từ trang web có nhiều bảng có cùng số cột, với gấu trúc read_html. Khi tôi đọc một liên kết duy nhất thực sự có nhiều bảng có cùng số cột, gấu trúc đọc tất cả các bảng một cách hiệu quả như một (một cái gì đó giống như một bảng phẳng/chuẩn hóa). Tuy nhiên, tôi quan tâm đến việc làm tương tự cho một danh sách các liên kết từ một trang web (ví dụ một bảng phẳng duy nhất cho một số liên kết), vì vậy tôi thử như sau:Làm cách nào để xác định lại các cột không đúng định dạng được lấy từ gấu trúc read_html?

Trong:

import multiprocessing 
def process(url): 
    df_url = pd.read_html(url) 
    df = pd.concat(df_url, ignore_index=False) 
    return df_url 

links = ['link1.com','link2.com','link3.com',...,'linkN.com'] 

pool = multiprocessing.Pool(processes=6) 
df = pool.map(process, links) 
df 

Tuy nhiên, tôi đoán tôi không specifiying corecctly để read_html() đó là những cột, vì vậy tôi đang nhận được danh sách này bị thay đổi danh sách:

Out:

[[    Form  Disponibility \ 
    0 290090 01780-500-01) Unavailable - no product available for release. 

          Relation \ 

    Relation drawbacks 
    0     NaN      Removed 
    1     NaN      Removed ], 
[          Form \ 

            Relation \ 
    0 American Regent is currently releasing the 0.4... 
    1 American Regent is currently releasing the 1mg... 

    drawbacks 
    0 Demand increase for the drug 
    1       Removed , 
              Form \ 
    0 0.1 mg/mL; 10 mL Luer-Jet Prefilled Syringe (N... 

    Disponibility Relation \ 
    0       Product available     NaN 
    2      Removed 
    3      Removed ]] 

vì vậy, câu hỏi của tôi Tôi nên di chuyển thông số nào để lấy khung dữ liệu pandas phẳng từ danh sách lồng nhau ở trên?. Tôi đã cố gắng để header=0, index_col=0, match='"columns"', không ai trong số họ làm việc hoặc tôi cần phải làm việc flatting khi tôi tạo khung dữ liệu gấu trúc với pd.Dataframe()?. Mục tiêu chính của tôi là phải có một dataframe gấu trúc như với các cột này:

form, Disponibility, Relation, drawbacks 
1 
2 
... 
n 

Trả lời

3

IIUC bạn có thể làm theo cách này:

đầu tiên bạn muốn trở nối DF, thay vì danh sách các DFS (như read_html lợi nhuận một danh sách của DFS):

def process(url): 
    return pd.concat(pd.read_html(url), ignore_index=False) 

và sau đó ghép chúng cho tất cả các URL:

df = pd.concat(pool.map(process, links), ignore_index=True) 
+0

Cảm ơn sự giúp đỡ. Trong '----> 4 df = pd.concat (pool.map (process, links), ignore_index = True)'. Tôi nhận được: 'TypeError: không thể nối một đối tượng không phải NDFrame'. Bất kỳ ý tưởng về lý do tại sao điều này đang xảy ra và phải làm gì ?. – tumbleweed

+1

@tumbleweed, 'pool.map (quá trình, liên kết)' trả về là gì? Đây có phải là danh sách các DF hay một cái gì đó khác? – MaxU

+0

Cảm ơn một lần nữa Max, giữ tôi chạy lại nó và mất một thời gian. – tumbleweed

Các vấn đề liên quan