Панды read_html: как читать столбцы, которые содержат? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь прочитать html-таблицу с python, которая выглядит следующим образом:

+------------+---------+
|    ID      | Value   |
+------------+---------+
| 1          | 12 098  |
| 2          |     20  |
| 3          | 123 456 |
+------------+---------+

В html-коде элементы выглядят так:

<span> 123&nbsp;456</span>

Панды читают это как объект, но мне нужно, чтобы он был числовым.Я попытался:

df_tables=pd.read_html(table_html,header=0,thousands='&nbsp;')

и

 df_tables=pd.read_html(table_html,header=0,thousands=' ')

Но столбец всегда «объект».

Я попытался привести к плавающему:

df_table['Value']=df_table['Value'].apply(pd.to_numeric,errors='coerce')

Но это просто удалило значения в столбцах, где было пустое место.

ВпоследствииЯ пытался убрать пробел из столбца перед применением к числовому:

df_table=df_table['Value'].map(lambda x: x.strip(' '))

Но, похоже, это не имеет никакого эффекта.Я предпочел бы исправить это при чтении HTML, но я рад принять любое решение, которое дает мне числовой столбец на данный момент.

Обновление:

Iневозможно удалить &nbsp; из исходного html, потому что есть другие столбцы, содержащие текст.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Еще один способ подойти к этому

import pandas as pd

html_string = """
<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>value</th> 
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>1&nbsp;230</td> 
    </tr>
    <tr>
      <td>2</td>
      <td>100</td> 
    </tr>
    <tr>
      <td>3</td>
      <td>220</td> 
    </tr>
  </tbody>
</table>
"""

html_string = html_string.replace("&nbsp;","")

df_table = pd.read_html(html_string)
dfs = df_table[0]

for (index, row) in dfs.iterrows():
    print(float(row[1]))
0 голосов
/ 05 октября 2018

Попробуйте использовать:

df_table['Value'] = df_table['Value'].str.replace('\D', '').astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...