如何使pandas.read_sql()不将所有标题转换为小写

时间:2016-03-30 16:12:23

标签: python sql pandas

我有一个函数将表格从我们的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保持原始大小写?

2 个答案:

答案 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