Redshift python连接器列名称是字节字符串
Posted
技术标签:
【中文标题】Redshift python连接器列名称是字节字符串【英文标题】:Redshift python connector columns names are byte string 【发布时间】:2021-10-28 18:38:44 【问题描述】:假设我在 redshift 中有下表:
a | b
-----
1 | 2
3 | 4
如果我想将它从 Redshift 中提取到 pd.DataFrame
,我可以执行以下操作:
import redshift_connector
import pandas as pd
query = 'SELECT * FROM table'
conn = redshift_connector(user=user, host=host, password=password, port=port, database=database)
df = pd.read_sql_query(query, conn)
我正在使用以下包redshift_connector。但问题是df
中的列名是字节串:
df['a']
这将返回错误,因为列的名称是 b'a'
。有谁知道任何解决方法?我已经使用psycopg2
编写了使用普通字符串的代码,因此希望有一个不会对代码进行太多更改的解决方案。
编辑:
版本
Python = 3.9.7
红移连接器 = 2.0.889
熊猫 = 1.2.5
【问题讨论】:
【参考方案1】:你可以用一行来解决这个问题
df.columns = [col.decode("utf-8") for col in df.columns]
或者不要使用pd.read_sql_query
,而是使用文档中建议的连接方法
cursor: redshift_connector.Cursor = conn.cursor()
cursor.execute("SELECT * FROM table")
result: pd.DataFrame = cursor.fetch_dataframe()
【讨论】:
以上是关于Redshift python连接器列名称是字节字符串的主要内容,如果未能解决你的问题,请参考以下文章
Redshift Dist 键、IDentity 列或连接列?列的基数,用于排序键的联接考虑