我正在从一个网站中检索一些内容,这些网站有几个具有相同列数的表,使用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
尽管如此,我想我并没有指定core_cts的corecctly,因此我得到了这个列表格式错误的列表:
日期:
[[ 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 = 0,index_col = 0,match =’“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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。