13

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

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

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

4

4 回答 4

19

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

熊猫版本:0.23.4

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

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

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

于 2018-10-05T22:23:00.580 回答
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,默认“。” 识别为小数点的字符(例如,对欧洲数据使用​​“,”)。.. 版本添加:: 0.19.0

于 2016-09-09T13:51:26.927 回答
2

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

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

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

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

于 2016-09-09T15:07:25.753 回答
1

我正在使用 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
于 2017-01-09T11:40:50.677 回答