如何在不舍入整数值的情况下刮取网站表?

2024-06-15 23:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从一个德国网站上抓取表格。德国人用逗号(,)表示小数(.),用小数表示逗号。当我刮表时,它会自动取整或转换数据。例如,如果值为“两千”,则德语写为2.000。BS4将其转换为两(2)

有没有什么解决方案可以让我在不改变数值的情况下进行刮取

这是我的密码

import requests
import pandas as pd

url = "https://buchholz-stadtwerke.de/wasseranalyse.html"

df = pd.read_html(requests.get(url).text, flavor="bs4")
df = pd.concat(df)

Tags: 数据importurldf网站html情况解决方案
2条回答

您可以使用thousands='.'decimal=','参数:

import requests
import pandas as pd

url = "https://buchholz-stadtwerke.de/wasseranalyse.html"

df = pd.read_html(requests.get(url).text, flavor="bs4", thousands='.', decimal=',')
print(df)

印刷品:

[                    Parameter  Einheit    Grenzwert Messwert, Februar 2020
0            Wassertemperatur       °C          NaN                    9.8
1         Leitfähigkeit (25°)    µS/cm         2790                    302
2   Sauerstoff (elektrochem.)     mg/l          NaN                   10.9
3                     pH-Wert      NaN  6,5 bis 9,5                   8.06
4             Sättigungsindex      NaN          NaN                   0.01
5         Karbonathärte (dH°)      °dH          NaN                   4.54
6           Gesamthärte (dH°)      °dH          NaN                   6.45
7                Härtebereich      NaN          NaN                  weich
8         Calcitlösekapazität     mg/l            5                   -0.1
9                     Fluorid     mg/l          1.5                   <0,1
10                    Chlorid     mg/l          250                   22.8
11               Nitrit (NO2)     mg/l          0.1                  <0,01
12               Nitrat (NO3)     mg/l           50                   6.29
13                 o-Phosphat     mg/l          NaN                   <0,1
14                     Sulfat     mg/l          250                   28.5
15                     Cyanid     mg/l         0.05                 <0,005
16                    Natrium     mg/l          200                   13.3
17                   Ammonium     mg/l          0.5                   <0,1
18                     Kalium     mg/l          NaN                   1.09
19                  Magnesium     mg/l          NaN                   2.58
20           Ionenbilanz in %        %   -4 bis 4,0                   1.82
21                    Trübung      NTU            1                    0.5
22     Färbung (SAK Hg 436nm)      m-1          0.5                   <0,2
23                  Geschmack      NaN          NaN                   ohne
24                      Arsen     mg/l         0.01                 <0,002
25                Quecksilber     mg/l        0.001                <0,0002
26                       Blei     mg/l         0.01                 <0,003
27                    Cadmium     mg/l        0.003                <0,0005
28                     Kupfer     mg/l            2                  <0,01
29                        Bor     mg/l            1                   0.03
30                  Aluminium     mg/l          0.2                  <0,02
31                    Antimon     mg/l        0.005                 <0,001
32                      Selen     mg/l         0.01                 <0,003
33                      Eisen     mg/l          0.2                  <0,02
34                     Mangan     mg/l         0.05                 <0,005
35       Kolonienzahl bei 22°      /ml          100                      0
36       Kolonienzahl bei 36°      /ml          100                      0
37        Coliforme Bakterien  /100 ml            0                      0]

对于本例,您可能希望将,替换为.,以获得正确的十进制数表示:

import requests
import pandas as pd

url = "https://buchholz-stadtwerke.de/wasseranalyse.html"

df = pd.read_html(requests.get(url).text.replace(",", "."), flavor="bs4")
df = pd.concat(df)
print(df)

输出:

1         Leitfähigkeit (25°)    µS/cm         2790                    302
2   Sauerstoff (elektrochem.)     mg/l          NaN                   10.9
3                     pH-Wert      NaN  6.5 bis 9.5                   8.06
...

编辑:

由于这可能仅适用于本例,因此更好的方法是使用传递给thousands=decimal=参数

相关问题 更多 >