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

jjv*_*ade 5 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)
Run Code Online (Sandbox Code Playgroud)

SQL中的标头例如:pmiManufacturingHeadline_Level它在我的熊猫数据框中显示为:pmimanufacturingheadline_level

任何人都有一个想法如何使pandas.read_sql保持原始大小写?

Max*_*axU 5

我认为PyPyODBC为您做到了:

这是我在PyPyODBCver 的源代码中找到的。1.3.3行:28-29:

version = '1.3.3'
lowercase=True
Run Code Online (Sandbox Code Playgroud)

和1771-1772行:

        if lowercase:
            col_name = col_name.lower()
Run Code Online (Sandbox Code Playgroud)

因此,您可以根据需要更改行为:

import pypyodbc
pypyodbc.lowercase = False  # force the ODBC driver to use case-sensitive column names
Run Code Online (Sandbox Code Playgroud)


Flo*_*ker 5

我知道这个问题使用 SQL Server 和 PyODBC,但对于通过 Google 来到这里并使用 PostgreSQL / psycopg2 的每个人来说:PostgreSQL 自动将不带引号的列名称转换为小写,所以如果您有这样的查询

SELECT foo AS MY_FOO FROM some_table
Run Code Online (Sandbox Code Playgroud)

my_foo然后你会从得到一列pd.read_sql

要恢复预期的拼写,请引用列别名,如下所示:

SELECT foo AS "MY_FOO" FROM some_table
Run Code Online (Sandbox Code Playgroud)

但请注意,这仅对别名有效。对于实际的列名称,您必须使用创建列时使用的拼写,该拼写可能是小写的(有意或通过自动转换)。

有关详细信息,请参阅此问题。