pandas.read_html不支持小数逗号

时间:2016-09-09 13:35:16

标签: python pandas decimal xlm

我正在使用z = 2; z*npsRadSlice = 3 读取xlm文件并且工作得非常完美,问题是该文件的逗号为十进制分隔符而不是点(pandas.read_html中的默认值)。

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

这个问题的任何指导?还有另一种方法可以在熊猫打开之前自动进行逗号/点替换吗? 提前致谢!

4 个答案:

答案 0 :(得分:4)

查看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,默认'。'           要识别为小数点的字符(例如,使用','表示欧洲语           数据)。           .. versionadded :: 0.19.0

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

直到我同时使用了十进制=','和'数千=',这才对我有用。

熊猫版本:0.23.4

因此,请尝试同时使用小数和千位: 即: pd.read_html(io="http://example.com", decimal=',', thousands='.')

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

它仍以str类型保存在数据框中,但至少我不必手动将点插入。数字正确显示; 0,7->“ 0.7”

答案 3 :(得分:0)

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

例如:

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

将认识到价值" 1.401,40"在表格单元格中为140140(浮动)。

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

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