首页 > 解决方案 > 如何使用 read_sql_query 读取带十进制逗号的浮点值

问题描述

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

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

但是我在 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 模块负责?

我究竟做错了什么?

标签: pythonpandas

解决方案


我找到了问题的根本原因:在堆栈溢出中发布并回答了一个等效问题: 在 sqlite 中的浮点数和整数之间的选择中进行乘法运算时出现问题 [关闭]

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

或者我可以用“。”替换“,”。在我使用以下命令将数据导入 SQLite 后:

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

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


推荐阅读