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"
我正在使用 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"