我正在使用jpype,jaydebeapi连接到可以正常工作的Oracle数据库,但是sql返回元组,而不是在每个字符后带有方括号和逗号的字符串。
例如,它代替狗返回(d,o,g,)
在DBeaver或Toad中运行相同的SQL会返回该字符串,而不会像您期望的那样进行更改。
请问如何返回不带括号和逗号的字符串?(我仍然可以使用数据,但是在图表中看起来很奇怪,这使得图表和其他输出难以阅读)。
我已经在Google和stackoverflow中搜索了类似的问题(link1,link2,link3),但是这些解决方案都不对我有用。我需要找到一种遍历所有列的方法,以找到具有dtype字符串的列,然后将所有元组加入其中。
这是如何返回数据的屏幕截图:df_screenshot
这里是一个枢轴(示出可以在不使用括号和逗号使用的数据)的屏幕截图:pivot_screenshot
这是图表的屏幕截图(再次显示带有括号和逗号的字符串):chart_screenshot
我用于连接的代码如下(据我所知,这没有问题吗?):
import jpype, jaydebeapi
import pandas as pd
jpype.startJVM(f"-Djava.class.path=D:\jdbc\ojdbc8.jar")
url = "jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=1000)(TRANSPORT_CONNECT_TIMEOUT=1000)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT=""))(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT=""))(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT="")))(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT=""))(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT=""))(ADDRESS=(PROTOCOL=TCP)(HOST="")(PORT="")))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME="")))"
user = ""
password = ""
conn=jaydebeapi.connect("oracle.jdbc.OracleDriver", url, [user, password])
cursor = conn.cursor()
sql_query = ''''''
cursor.execute(sql_query)
data = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
columns = [''.join(i) for i in columns]
cursor.close()
data = pd.DataFrame(data)
data.columns = columns
pd.options.display.float_format = '{:,.0f}'.format
pivot = pd.pivot_table(data, index=['COUNTRY'], values=['CUSTOMERS'], aggfunc=(sum))
pivot.plot(kind='bar')
conn.close()
jpype.shutdownJVM()
到目前为止,这是我尝试过的:
for col in data.columns:
for ix in data.index:
data[ix][col] = ''.join(data[ix][col])
这将返回一个Keyerror:0
data.select_dtypes(include=['object']).agg(' '.join)
#and
data.select_dtypes(include=['object']).apply(lambda x: ''.join(x))
这两个都返回TypeError:序列项0:预期的str实例,找到java.lang.String
我当然已经查询了这些错误消息,但无法分辨我在做什么错。
非常感谢您的帮助!
谢谢!!!
更新:我刚刚注意到,当我将dtype'object'转换为'category'(这样做是为了可以在数据透视表中对列进行排序)时,它显示的字符串没有括号和逗号。因此,然后我尝试根据每个帖子链接4的代码将所有“对象”列转换为“类别” :
data = pd.concat([
data.select_dtypes([], ['object']),
data.select_dtypes(['object']).apply(pd.Series.astype, dtype='category')
], axis=1).reindex(data.columns, axis=1)
但是,现在出现以下错误:ValueError:设置具有序列的数组元素
如果我一一列出每一列,似乎似乎是可行的:-S
您可以尝试为data
dataFrame运行以下命令:
for col in data.select_dtypes(include=['object']).columns:
data[col] = data[col].apply(lambda x: ''.join(x) if x is not None else x)
它应遍历所有包含文本或数字和非数字混合值的列,并将元组元素转换为字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句