【问题标题】:How to read float values with decimal comma using read_sql_query如何使用 read_sql_query 读取带十进制逗号的浮点值
【发布时间】:2020-11-16 21:06:25
【问题描述】:

我在德国计算机上使用 DataFrame.read_sql_query 和 SQLite 时遇到问题:根据数字的本地设置,十进制字符是逗号 ',' 而不是点 '。'

使用 CSV 和 pandas,很容易在函数 read_csvto_csv 中使用 decimal 参数将十进制字符设置为 ','。

但是我在sql函数read_sql/read_sql_query中缺少这个参数。当我从我的 SQL 表中读取浮点值时,pandas 将返回对象而不是浮点数。

示例: 这是我在 SQLite 中的表。

CREATE TABLE myvalues (
p_id INTEGER NOT NULL,
time INTEGER NOT NULL,
y FLOAT NOT NULL);

我使用 sqlite3 和 pandas 来读取 'y' 中的值:

dns_sqlite = r'db\dm.output.sqlite3'
conn_sqlite = sqlite3.connect(dns_sqlite)
df = pd.read_sql_query("select * from myvalues, conn_sqlite)

DataFrame 的头部是:

p_id        time                    y
0   61      1575272655947000000     0,299893262748943
1   60      1575272655947000000     0,325854761161171
2   57      1575272655947000000     0,323828854628018
3   62      1575272655947000000     0,310302948951226
4   58      1575272655947000000     0,32878052447951    

dtypes 是:

p_id     int64
time     int64
y       object
dtype: object

您可以看到y 的类型是“object”而不是“float”。

我不明白问题出在哪里。是因为pandas,它没有使用我电脑的本地设置吗?还是 sqlite3 模块负责?

我做错了什么?

【问题讨论】:

  • 实际上我只是使用 python sqlite 进行测试来读取表 myvalues 并再次将浮点值作为字符串获取。所以问题似乎来自sqlite3。是否有可能告诉 sqlite3 使用 ',' 而不是 '.'?

标签: python pandas


【解决方案1】:

我找到了问题的根本原因: 在堆栈溢出中发布并回答了一个等效问题: Problem doing multiplication operation in a select between a float and an integer in sqlite [closed]

所以我想我应该使用 '.'当我将数据导入 SQLite 时,而不是 ','。

或者我可以将 ',' 替换为 '.'在我使用以下方法将数据导入 SQLite 后:

update myvalues
set y = replace(y, ',', '.')
where y = '%,%';

这不是很好,但我目前没有看到任何更清洁的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2014-10-23
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多