python - Pandas 将数字转换为字符串 - 意外结果

标签 python pandas dataframe file-conversion

似乎没有办法将输入表(从 html/xls/etc 文件)获取到 DataFrame 对象,因为它是一对一的,没有 Pandas 内部应用的任何字段转换。

假设以下 html 表以 .xls 文件的扩展名保存,我们如何在 Python 内存中使用 DataFrame 对象获得该表的相同表示?

“test_file.xls”的内容:

<body>
    <table>
        <thead>
            <tr>
                <th class="tabHead" x:autofilter="all">Number</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="tDetail">1.320,00</td>
            </tr>
            <tr>
                <td class="tDetail">600,00</td>
            </tr>
        </tbody>
    </table>
</body>

(1) 文件的直读

处理代码:
import pandas

df = pandas.read_html('test_file.xls')
print(df[0])
print(df[0].dtypes)

输出:
     Number
0      1.32
1  60000.00

Number    float64
dtype: object

正如我们所看到的,这些数字通过一些预定义的逻辑转换为 float64。我认为这个逻辑包括语言环境设置,可能是 Pandas 内部的一些规则等。直接指定字符串转换器不允许获取初始值。

(2) 应用str函数作为每个维度的转换器

处理代码:
converters = {column_name: str for column_name in df[0].dtypes.index}
df = pandas.read_html(f, converters = converters)
print(df[0])
print(df[0].dtypes)

输出:
    Number
0  1.32000
1    60000

Number    object
dtype: obje

显然,这个问题的预期输出是:
     Number
0  1.320,00
1    600,00

可能有 的情况。一个 文件包含在 中键入的数字不同格式(美国/欧洲/等)。这个数字与小数点、千位标记等不同。因此,处理此类文件的逻辑方法是在字符串中“按原样”提取数据,并使用正则表达式/其他模块分别为每一行执行解析。有没有办法在 Pandas 中做到这一点?还有其他方法可以处理此类文件的处理吗?多谢你们!

备注:
pandas.read_* 的“十进制”和“千”参数的规范看起来不是一个可靠的解决方案,因为它适用于所有字段。快速示例:它可以处理 中的日期字段"02.2017"格式为数字并将其转换为 "022017" .

最佳答案

您必须指定千位和小数分隔符。这对我有用:

import pandas as pd

html = """
<body>
    <table>
        <thead>
            <tr>
                <th class="tabHead" x:autofilter="all">Number</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="tDetail">1.320,00</td>
            </tr>
            <tr>
                <td class="tDetail">600,00</td>
            </tr>
        </tbody>
    </table>
</body>
"""

df = pd.read_html(html, decimal=",", thousands=".")
print(df)

关于python - Pandas 将数字转换为字符串 - 意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47327966/

相关文章:

python - 如何获得准确的音频时基

python - 使用多维特征(输入维度误差)使用 scikit-learn KNN 进行分类

Python Pandas 打印出每个单元格的值

python - 如何截断 Pandas 时间序列数据框中的列以删除前导零和尾随零?

python - Django 测试用例错误 'WSGIRequest' 对象没有属性 'session'

python - 如何从jupyter笔记本导出清理后的数据,而不是原始数据

python - 如何从另一个 DataFrame 添加数据,其中不同的日期粒度匹配?

python - 如果满足特定条件如何删除行(Python)

python - 操作数据框以创建数据透视表

python - 如何在 tkinter 中向文本小部件添加滚动条