多年前我在v15.0之前使用过pandas read_html
,使用了infer_types=False
中>>>import pandas as pd
>>>html1 = '<table> <thead> <tr> <th>C1</th> <th>C2</th> <th>C3</th> </tr> </thead> <tr> <td>$1.0</td> <td>1G</td> <td>50.0</td> </tr> <tr> <td>$73.0</td> <td>2</td> <td>94.0</td> </tr> </table>'
>>>html2 = '<table> <thead> <tr> <th>C1</th> <th>C2</th> <th>C3</th> </tr> </thead> <tr> <td>$4.0</td> <td>1</td> <td>42.0</td> </tr> <tr> <td>$33.0</td> <td>2.2</td> <td>50.0</td> </tr> </table>'
>>>df1 = pd.read_html(html1)
>>>df1[0].dtypes
0 object
1 object
2 float64
>>>df2 = pd.read_html(html2)
>>>df2[0].dtypes
0 object
1 float64
2 float64
的选项。
显然,对此的支持是v12.0 documentation。
以下是我现在面临的一个例子:
df1
正如您可以看到我在C2列中遇到的麻烦。在object
中,列dtype被解析为df2
(由于第0个索引中存在G),而在int64
中,列dtype被解析为df1 = df1.astype("object")
df2 = df2.astype("object")
(由于存在小数位数。)
我提出的解决方案是:
int
我对此解决方案的问题是,如果我在列中有float
和int
,我想保留read_html
但{{{ 1}}自动将int值推断为float,当我将列的dtype
更改为str
或object
时,数字为int
的事实未能以字符串格式恢复为该格式。
我的问题是,如何处理html并对Pandas中17.0以后版本的数据类型设置限制。