python - 如何使用 read_sql_query 读取带十进制逗号的浮点值
问题描述
我DataFrame.read_sql_query
在德国计算机上使用 SQLite 时遇到问题:根据数字的本地设置,十进制字符是逗号“,”而不是点“。”
使用 CSV 和 pandas,很容易在函数中将十进制字符设置为“,”read_csv
并to_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 模块负责?
我究竟做错了什么?
解决方案
我找到了问题的根本原因:在堆栈溢出中发布并回答了一个等效问题: 在 sqlite 中的浮点数和整数之间的选择中进行乘法运算时出现问题 [关闭]
所以我想我应该使用'。当我将数据导入 SQLite 时,而不是“,”。
或者我可以用“。”替换“,”。在我使用以下命令将数据导入 SQLite 后:
update myvalues
set y = replace(y, ',', '.')
where y = '%,%';
这不好,但我目前没有看到任何更清洁的解决方案。
推荐阅读
- delphi - 如何在 fastreport 中合并单元格?
- python - Web 抓取 Python 脚本不会给出错误或结果。是请求问题还是 XPATH 问题?
- html - 类型错误:结果集不可调用 - BeautifulSoup
- angular - 模板解析错误:无法绑定到“showMePartially”,因为它不是“allrecords-app”的已知属性
- azure - 从 Azure 门户中删除 Azure DevOps 项目
- react-native - React-native-navigation:如何启动 Playground 应用程序?
- go - 去使用 fsnotify 监视文件已更改不起作用
- r - 使用带有空间多边形的特定变量进行传单映射
- amazon-web-services - ELB 是否提高了 AWS 架构的可用性?
- python - Python 重新导出另一个同名脚本