我正在尝试使用python读取html表,如下所示:
+------------+---------+
| ID | Value |
+------------+---------+
| 1 | 12 098 |
| 2 | 20 |
| 3 | 123 456 |
+------------+---------+
在html代码中,元素如下所示:
<span> 123 456</span>
Pandas将此作为对象读取,但我需要将其数字化。我尝试过:
df_tables=pd.read_html(table_html,header=0,thousands=' ')
和
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时解决此问题,但我很乐意接受目前可以为我提供数值列的任何解决方案。
更新:
我无法从源html中删除
,因为还有其他包含文本的列。
答案 0 :(得分:0)
尝试使用:
df_table['Value'] = df_table['Value'].str.replace('\D', '').astype(int)
答案 1 :(得分:0)
另一种解决方法
import pandas as pd
html_string = """
<table>
<thead>
<tr>
<th>ID</th>
<th>value</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1 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(" ","")
df_table = pd.read_html(html_string)
dfs = df_table[0]
for (index, row) in dfs.iterrows():
print(float(row[1]))