如何使 pandas.read_sql() 不将所有标题转换为小写
Posted
技术标签:
【中文标题】如何使 pandas.read_sql() 不将所有标题转换为小写【英文标题】:how to make pandas.read_sql() not convert all headers to lower case 【发布时间】:2016-07-18 18:38:28 【问题描述】:我有一个函数可以将 SQL 服务器中的表中的表提取到 Python 中的数据框中,但它会强制所有列标题为小写。代码如下:
connection = pypyodbc.connect('Driver=SQL Server;'
'Server=' + server + ';'
'Database=' + database + ';'
'uid=' + username + ';'
'pwd=' + password + ';')
query = 'SELECT * FROM ' + tableName
#set dict value to dataframe imported from SQL
tableDict[tableName] = pd.read_sql(query, connection)
SQL 中的标题例如:pmiManufacturingHeadline_Level 它在我的熊猫数据框中显示为:pmimanufacturingheadline_level
有人知道如何让 pandas.read_sql 保持原来的大小写吗?
【问题讨论】:
【参考方案1】:我认为 PyPyODBC 会为你做到这一点:
这是我在PyPyODBC
ver 的源代码中找到的。 1.3.3行:28-29:
version = '1.3.3'
lowercase=True
和第 1771-1772 行:
if lowercase:
col_name = col_name.lower()
因此您可以根据需要更改行为:
import pypyodbc
pypyodbc.lowercase = False # force the ODBC driver to use case-sensitive column names
【讨论】:
啊,我明白了!那是危险的领域,但我可能会尝试哈哈。谢谢 将小写更改为 False 并重新安装该自定义包。这行得通。非常感谢! @jjvandermade,总是乐于提供帮助:) 有趣的是 PyODBC also has thelowercase
option 但默认为 False
。【参考方案2】:
我知道这个问题使用 SQL Server 和 PyODBC,但对于通过 Google 来到这里并使用 PostgreSQL / psycopg2 的每个人:PostgreSQL 会自动将不带引号的列名转换为小写,所以如果您有类似的查询
SELECT foo AS MY_FOO FROM some_table
然后你会从pd.read_sql
得到一个my_foo
列。
要恢复预期的拼写,请按如下方式引用列别名:
SELECT foo AS "MY_FOO" FROM some_table
但是请注意,这仅适用于别名没有问题。关于实际的列名,您必须使用创建列时使用的拼写,这可能是小写的(有意或通过自动转换)。
详情请见this SO question。
【讨论】:
以上是关于如何使 pandas.read_sql() 不将所有标题转换为小写的主要内容,如果未能解决你的问题,请参考以下文章
在 pandas 中为 read_sql 指定 dtypes