我正在使用 xlm 文件读取pandas.read_html
并且工作得几乎完美,问题是该文件有逗号作为小数分隔符而不是点(默认值read_html
)。
我可以很容易地在一个文件中用点替换逗号,但我有近 200 个具有该配置的文件。你可以定义小数点分隔符,pandas.read_csv
但我不知道为什么pandas.read_html
你只能定义千位分隔符。
在这件事上有什么指导吗?还有另一种方法可以在熊猫打开逗号/点之前自动替换它吗?提前致谢!
直到我同时使用小数=','和数千=',这才开始对我有用。
熊猫版本: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”
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
我正在使用 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