pandas.read_html不支持十进制通信

2024-04-19 06:14:44 发布

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

我正在用pandas.read_html读取一个xlm文件,它的工作几乎完美无瑕,问题是该文件使用逗号作为十进制分隔符而不是点(默认的read_html)。在

我可以很容易地在一个文件中用圆点替换逗号,但我有将近200个文件使用这种配置。 使用pandas.read_csv可以定义十进制分隔符,但我不知道为什么在pandas.read_html中只能定义千位分隔符。在

这件事有什么指导吗?,在pandas打开逗号/点之前,还有另一种方法可以自动替换逗号/点? 提前谢谢!在


Tags: 文件csv方法pandasread定义html指导
3条回答

谢谢@zhqiat。我认为升级pandas到版本0.19可以解决这个问题。不幸的是,我找不到一个简单的方法来实现这一点。我找到了一个升级Pandas的教程,但是针对ubuntu(winXP用户)。在

最后,我选择了解决方法,使用post here方法,基本上将所有列逐个转换为pandas.Series的数字类型

result[col] = result[col].apply(lambda x: x.str.replace(".","").str.replace(",","."))

我知道这个办法不是最好的,但很管用。谢谢

直到我同时使用了decimal='、'和千分位=',这才开始对我起作用

熊猫版本:0.23.4

所以尽量使用十进制和千分位: 即。: pd.read_html(io="http://example.com", decimal=',', thousands='.')

在此之前,我只使用decimal=','并且数字列将被保存为str类型,数字只是省略逗号。(奇怪的行为)例如0,7将是“07”,“1,9”将是“19”

它仍然以str类型保存在dataframe中,但至少我不需要手动添加点。数字显示正确;0,7->;“0.7”

查看read_html的源代码

def read_html(io, match='.+', flavor=None, header=None, index_col=None,
              skiprows=None, attrs=None, parse_dates=False,
              tupleize_cols=False, thousands=',', encoding=None,
              decimal='.', converters=None, na_values=None,
              keep_default_na=True):

函数头表示函数调用中有一个十进制分隔符。在

在文档的后面,这看起来像是在0.19版本中添加的(所以在实验分支的后面一点)。你能升级你的熊猫吗?在

decimal : str, default '.' Character to recognize as decimal point (e.g. use ',' for European data). .. versionadded:: 0.19.0

相关问题 更多 >