2016-11-05 10 views
5

मैं ऐसी वेबसाइट से कुछ सामग्री पुनर्प्राप्त कर रहा हूं जिसमें पैंडस read_html के साथ कॉलम की समान संख्या वाले कई तालिकाओं हैं। जब मैं एक लिंक को पढ़ता हूं जिसमें वास्तव में कॉलम की संख्या के साथ कई तालिकाओं होते हैं, तो पांडा प्रभावी रूप से सभी तालिकाओं को एक (एक फ्लैट/सामान्यीकृत तालिका की तरह) पढ़ते हैं। हालांकि, मैं एक वेबसाइट (कई लिंक के लिए यानी एक भी फ्लैट तालिका) से लिंक की एक सूची के लिए भी ऐसा ही करने में दिलचस्पी है, तो मैं निम्नलिखित की कोशिश की:pandas read_html से पुनर्प्राप्त malformed कॉलम reindex कैसे करें?

में:

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 

फिर भी, मैं लगता है कि मैं read_html() जो स्तंभ हैं करने के लिए corecctly specifiying नहीं कर रहा हूँ, इसलिए मैं सूचियों के इस विकृत सूची हो रही है:

आउट:

[[    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 ]] 

तो मेरे सवाल उपरोक्त नेस्टेड सूची से एक फ्लैट पांडा डेटाफ्रेम प्राप्त करने के लिए मुझे किस पैरामीटर को स्थानांतरित करना चाहिए? मैंने header=0, index_col=0, match='"columns"' पर कोशिश की, उनमें से कोई भी काम नहीं करता या मुझे फ़्लैटिंग करने की आवश्यकता होती है जब मैं pd.Dataframe() के साथ पांडा डेटाफ्रेम बना देता हूं?

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

उत्तर

3

IIUC आप इसे इस तरह से कर सकते हैं::,

पहले आप श्रेणीबद्ध DF लौटना चाहते DFS की सूची के बजाय (के रूप में read_html रिटर्न मेरा मुख्य उद्देश्य इस कॉलम के साथ की तरह एक पांडा dataframe है एक सूची DFS की):

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

और उसके बाद सभी URL के लिए उन्हें श्रेणीबद्ध:

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

सहायता के लिए धन्यवाद। '----> 4 डीएफ = पीडी.कोनकैट (पूल.मैप (प्रक्रिया, लिंक), ignore_index = True) में। मुझे मिला: 'TypeError: गैर-एनडीफ़्रेम ऑब्जेक्ट को संयोजित नहीं कर सकता'। यह क्यों हो रहा है और क्या करना है इसका कोई विचार? – tumbleweed

+1

@ टम्बलवेड, 'pool.map (प्रक्रिया, लिंक) 'रिटर्न क्या करता है? क्या यह डीएफ की सूची है या कुछ अलग है? – MaxU

+0

धन्यवाद मैक्स, मैं इसे फिर से चलाता हूं और थोड़ी देर ले रहा हूं। – tumbleweed

संबंधित मुद्दे