pandas.read_html 不支持小数逗号

pandas.read_html not support decimal comma

我正在使用 pandas.read_html 读取一个 xlm 文件并且几乎完美地工作,问题是该文件使用逗号作为小数点分隔符而不是点(read_html 中的默认值)。

我可以轻松地在一个文件中用点替换逗号,但我有将近 200 个文件具有该配置。 用 pandas.read_csv 可以定义小数点分隔符,但我不知道为什么在 pandas.read_html 中只能定义千位分隔符。

在这件事上有什么指导吗?还有另一种方法可以在 pandas 打开之前自动执行 comma/dot 替换? 提前致谢!

正在查看 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 中添加的(所以在实验分支的下方)。你能升级你的 pandas 吗?

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

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

我最终选择了解决方法,使用贴出的方法here,基本上将所有列一一转换为数字类型pandas.Series

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

我知道这个解决方案不是最好的,但很管用。谢谢

我正在使用 pandas 0.19,但它仍然无法正确转换数字。

例如:

a=pd.read_html(r.text,thousands='.',decimal=',')

将 table 单元格中的值“1.401,40”识别为 140140(浮点数)。

我使用与 'Pablo A' 类似的解决方案,只是更正 nan 值:

def to_numeric_comma(series):
    new=series.apply(lambda x: str(x).replace('.','').replace(',','.'))
    new=pd.to_numeric(new.replace('nan',pd.np.nan))
    return new

直到我同时使用了 decimal=',' 和 thousands='.'

,这才开始对我起作用

Pandas版本:0.23.4

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

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

它仍然作为 str 类型保存在数据框中,但至少我不必手动输入点。数字显示正确; 0,7 -> "0.7"