一些小丑制作了一个Lotus数据库/ applet,用于跟踪我们公司的工程问题.笑话是关键信息是用特殊字符命名的......数字符号(哈希标记,井号,\ u0023).
缩写样本:
KA# Issue Date Current Position
27144 1/9/2014 Accounting
27194 12/20/2012 Engineering
32474 4/21/2008 Engineering
32623-HOLD 4/25/2016 Engineering
32745 11/13/2012 SEPE
32812 10/30/2013 Engineering
32817 12/7/2012 Purchasing
32839 1/8/2013 SEPE
Run Code Online (Sandbox Code Playgroud)
我将此表(4K行,15列)输出到csv文件,并在python3中作为pandas数据帧进行处理.
我生成各种输出.如果我使用类似的东西:
df.iloc[:,[0,3,1,8,9,10]]
Run Code Online (Sandbox Code Playgroud)
我获得了适当的输出,键列显示为"KA#".(当我说"关键列"时,我的意思是"最重要的"......不是"索引".我保留了一个串行索引)
不幸的是,人们有时会在我导出到csv之间弄乱Lotus中的列顺序,所以我无法保证"KA#"将是任何特定的列号.我想使用列名:
df.loc[:,["KA#","Issue Date","Current Position"]]
Run Code Online (Sandbox Code Playgroud)
但该"KA#"专栏充满了NaN's.
谢谢你尽你所能的帮助.
最后,如果我尝试重命名"KA#"为"KA":
df['KA#'].name = 'KA'
Run Code Online (Sandbox Code Playgroud)
抛出一个KeyError和
df = df.rename(columns={"KA#": "ka"})
Run Code Online (Sandbox Code Playgroud)
完全被忽略了.该列显示为"KA#".
任何人都可以想到摆脱或处理该符号的方法吗?在这一点上,我甚至会选择正则表达式.
我有一个加载、转换和计算数据的 python 脚本。在 sql-server 中有一个存储过程,它需要一个表值参数、2 个必需参数和 2 个可选参数。在 sql server 中,我可以调用这个 SP:
USE [InstName]
GO
DECLARE @return_value int
DECLARE @MergeOnColumn core.MatchColumnTable
INSERT INTO @MergeOnColumn
SELECT 'foo.ExternalInput','bar.ExternalInput'
EXEC @return_value = [core].[_TableData]
@Target = N'[dbname].[tablename1]',
@Source = N'[dbname].[table2]',
@MergeOnColumn = @MergeOnColumn,
@Opt1Param = False,
@Opt2Param = False
SELECT 'Return Value' = @return_value
GO
Run Code Online (Sandbox Code Playgroud)
经过全面搜索,我找到了以下帖子:
如何使用需要用户定义类型表参数的 SQLAlchemy 调用存储过程
它建议使用 PYTDS 和 sql-alchemy 的方言“sql alchemy pytds”来调用具有表值参数的 SP。通过这篇文章和文档,我创建了以下 Python 脚本:
import pandas as pd
import pytds
from pytds import login
import sqlalchemy as sa
from …Run Code Online (Sandbox Code Playgroud) python sql-server sqlalchemy table-valued-parameters python-db-api