我正在从一个网站上检索一些内容,该网站有几个列数相同的表,带有 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=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)
关于python - 如何重新索引从 pandas read_html 检索到的格式错误的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435222/