我正在从一个网站中检索一些内容,该网站具有多个表且具有相同的列数,并带有pandas read_html 。当我读取一个实际具有包含相同列数的表的单个链接时,pandas有效地将所有表读为一个表(类似于平面/归一化表)。但是,我有兴趣对网站中的链接列表进行相同的操作(即,一个平面表中包含多个链接),因此我尝试了以下操作:

在:

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(),所以我得到了这个格式不正确的列表:

出去:
[[                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 ]]

所以我的问题我应该移动哪个参数,以便从上面的嵌套列表中获得一个扁平的 Pandas 数据框?我尝试header=0index_col=0match='"columns"',它们都不起作用,或者当我用pd.Dataframe()创建 Pandas 数据框时我是否需要进行展平?我的主要目标是像这样的列创建一个pandas数据框:
form, Disponibility, Relation, drawbacks
1
2
...
n

最佳答案

IIUC您可以通过以下方式进行操作:

首先,您要返回串联的DF,而不是DF列表(因为read_html返回DF的列表):

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

然后将它们链接为所有URL:
df = pd.concat(pool.map(process, links), ignore_index=True)

关于python - 如何重新索引从 Pandas read_html检索的格式错误的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40435222/

10-16 22:27