使用colspan = 2的pandas read_html函数

Mar*_*kNS 2 pandas

我正在使用pandas read_html函数将html表加载到数据帧中,但它失败了,因为源数据有一个colspan = 2合并的头,导致这个AssertionError:传递了6列,传递的数据有7列.

我已尝试使用标题kwarg(header = None,header = ['Code'...])的各种选项,但似乎没有任何效果.

有没有人知道使用pandas read_html解析合并列的任何方法和html表?

Mar*_*hen 5

如果您不坚持使用pandas中的read_html,则此代码可以完成以下任务:

import pandas as pd
from lxml.html import parse
from urllib2 import urlopen
from pandas.io.parsers import TextParser

def _unpack(row, kind='td'):
   elts = row.findall('.//%s' % kind)
   return [val.text_content() for val in elts]

def parse_options_data(table):
  rows = table.findall('.//tr')
  header = _unpack(rows[0], kind='th')
  data = [_unpack(r) for r in rows[1:]]
  return TextParser(data, names=header).get_chunk()

parsed = parse(urlopen('http://www.bmfbovespa.com.br/en-us/intros/Limits-and-Haircuts-for-accepting-stocks-as-collateral.aspx?idioma=en-us'))
doc = parsed.getroot()
tables = doc.findall('.//table')
table = parse_options_data(tables[0])
Run Code Online (Sandbox Code Playgroud)

这取自Wes McKinney的"Python for Data analysis"一书.