【问题标题】:pandas.read_html not support decimal commapandas.read_html 不支持小数逗号
【发布时间】:2016-09-09 13:35:16
【问题描述】:

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

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

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

【问题讨论】:

  • 所以你文件中的 1000.21 是 1000,21?
  • @zhqiat 其实是1.000,21,还有千位分隔符

标签: python pandas decimal xlm


【解决方案1】:

直到我同时使用小数=',' 和千位='',这才开始对我有用。

熊猫版本: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”

【讨论】:

  • 这对 pandas 1.1.2 版也有帮助:当我添加 thousands='.' 时,十进制参数起作用了
【解决方案2】:

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 版中添加的(所以在实验分支的更下方)。你能升级你的熊猫吗?

十进制:str,默认 '.' 识别为小数点的字符(例如,使用 ',' 表示欧洲 数据)。 .. 版本添加:: 0.19.0

【讨论】:

  • 现在我正在使用最后一个稳定版本(默认在 anaconda 中)。我会尝试升级到 0.19 看看是否可行。 pd.__version__ u'0.18.1' 只要我尝试,我就会回来
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

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

    例如:

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

    会将表格单元格中的值“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多