我有一个函数将表格从我们的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 它在我的pandas数据框中显示为:pmimanufacturingheadline_level
任何人都知道如何让pandas.read_sql保持原始大小写?
答案 0 :(得分:4)
我认为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
答案 1 :(得分:1)
我知道这个问题使用SQL Server和PyODBC,但是对于所有通过Google来使用PostgreSQL的人,而是使用PostgreSQL / psycopg2:PostgreSQL自动将未加引号的列名转换为小写,所以如果您有类似这样的查询
SELECT foo AS MY_FOO FROM some_table
然后您将从my_foo
返回一个pd.read_sql
列。
要恢复预期的拼写,请按如下所示引用列别名:
SELECT foo AS "MY_FOO" FROM some_table
但是请注意,这仅适用于别名的问题。关于实际的列名,您必须使用创建列时使用的拼写,这可能是小写的(有意或通过自动转换)。
有关详细信息,请参见suggestion。