如何在 Python Pandas 中使用逗号作为小数分隔符的浮点格式?

Posted

技术标签:

【中文标题】如何在 Python Pandas 中使用逗号作为小数分隔符的浮点格式?【英文标题】:How to have float format with comma as a decimal separator in Python Pandas? 【发布时间】:2019-12-02 16:45:16 【问题描述】:

我有一个 csv,其中包含货币数字的字符串值,例如“R$2,444.99”,我读到需要为加载的 DataFrame 制作包含 sum、groupbys 等的报告。

对于这些列,我尝试创建一个自定义转换函数以将其加载为浮点数:

def convert_reais(value: str) -> float:
    """Transforms column value to calculable float."""
    if value == "":
        return 0.0
    return float(value.replace("R$", "").replace(".", "").replace(",", "."))

然后我能够正确地加载列,并传递一个字典,这些列映射到这个函数:

converters = column_net: convert_reais, column_gross: convert_reais

source_df = pd.read_csv(filename, encoding=file_encoding, sep=";",
                        skiprows=1, converters=converters)

我的最后一个问题是我需要显示 sums 和 groupbys 显示“,”作为小数点分隔符(默认情况下是“.”。例如:

print(source_df.groupby([column_sort])[column_net].sum())

我找到了一种格式化结果的方法:

pd.options.display.float_format = ":,.2f".format

但我没有找到将点更改为逗号的float_format

我还尝试使用以下方法加载 CSV:

thousands=".", decimal=","

但这并没有什么区别,因为“R$”仍然让它作为字符串加载。

对我的方法有什么想法吗?

【问题讨论】:

你应该用thousands='.', decimal=','阅读csv。 @QuangHoang 我已经更新了问题..但这没有任何区别。 【参考方案1】:

我找到了问题的解决方案。

只需按照以下步骤操作:

    导入内置语言环境模块:import locale 在您的 shell 中,使用您的货币格式从列表中选择所需并安装的语言环境:locale -a 在 python 上设置您的脚本语言环境:locale.setlocale(locale.LC_ALL, yourlocale) # ex. 'pt_BR.utf8' 更改 pandas 配置以显示浮动:pd.set_option("float_format", locale.currency)

【讨论】:

以上是关于如何在 Python Pandas 中使用逗号作为小数分隔符的浮点格式?的主要内容,如果未能解决你的问题,请参考以下文章

将整列整数转换为字符串,在 Pandas 中使用逗号分隔千位

Python/Pandas 如何在字符串中的每个数字后加上逗号

Python pandas-datareader 在逗号上失败

Python:从列表中删除逗号,以便我可以使用 pandas 将数据导入 Excel 中的单独单元格

使用 Python pandas 将具有逗号值的字符串转换为多层索引的单独行

在 Python 中使用 Excel 文件作为 pandas 数据框的映射