首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python错误:每个表中的列名必须是唯一的。怎么解决?

python错误:每个表中的列名必须是唯一的。怎么解决?
EN

Stack Overflow用户
提问于 2022-06-02 13:57:46
回答 1查看 208关注 0票数 1

我有一个代码,它读取并连接具有类似结构的文件并将其发送到数据库。除了这个特殊的情况外,它工作得很好。

我使用的代码的一部分是:

代码语言:javascript
复制
if file.suffix.lower() == '.xlsx' or file.suffix.upper() == '.XLSX':
     frame = pd.read_excel(file, header=0, engine='openpyxl')
(...)
     all_df_list.append(frame)


elif file.suffix.lower() == '.csv' or file.suffix.upper() == '.CSV':
     frameCSV = pd.read_csv(file, encoding="utf-8")
(..)
     all_df_list.append(frameCSV )

xls=pd.concat(all_df_list)
xls.to_sql(table, con=engine, if_exists='append', index=False, chunksize=10000)

此特定文件引发此错误:

代码语言:javascript
复制
(pyodbc.ProgrammingError) ('42S21', "[42S21] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Column names in each table must be unique. Column name 'Goal 09 - dp eur' in table 'custom_ga_goal_dpeur_carregosa' is specified more than once. (2705) (SQLExecDirectW)")

[SQL: 
CREATE TABLE dbo.custom_ga_goal_dpeur_carregosa (
    [Day] DATETIME NULL, 
    [Web Analytics Site Campaign] VARCHAR(max) NULL, 
    [Web Analytics Site Medium] VARCHAR(max) NULL, 
    [Web Analytics Site Source] VARCHAR(max) NULL, 
    [Web Analytics Site Content] VARCHAR(max) NULL, 
    [Web Analytics Keyword] VARCHAR(max) NULL, 
    [Device Category] VARCHAR(max) NULL, 
    [Goal 09 - dp eur ] FLOAT(53) NULL, 
    filename VARCHAR(max) NULL, 
    load_date VARCHAR(max) NULL, 
    [Goal 09 - dp eur] VARCHAR(max) NULL
)

我知道这个错误意味着什么。我只是想知道我有没有办法通过编码来解决这个错误?就像发生这种情况一样,加入列并只接受一种数据类型?我不能只对每一种情况进行查询,因为这是大量的文件,而且可能会在另一个文件中再次发生。

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 14:05:39

只需在追加命令之前将所有列转换为字符串:

代码语言:javascript
复制
if file.suffix.lower() == '.xlsx':
     frame = pd.read_excel(file, header=0, engine='openpyxl')
     frame =frame.astype(str)
(...)
     all_df_list.append(frame)


elif file.suffix.lower() == '.csv':
     frameCSV = pd.read_csv(file, encoding="utf-8")
     frameCSV =frameCSV.astype(str)
(..)
     all_df_list.append(frameCSV )

xls=pd.concat(all_df_list)
xls.to_sql(table, con=engine, if_exists='append', index=False, chunksize=10000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72477477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档