You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DuckDB Python客户端无需转Polars将列名空格替换为下划线?

解决方案

无需转换为Polars DataFrame,结合Python动态生成SQL或直接使用DuckDB关系型API,就能批量将列名中的空格替换为下划线,以下是两种实用实现方式:

方法1:动态生成带别名的SELECT语句

先获取目标表的列名,再构造带别名的查询语句,对含空格的列自动替换命名:

import duckdb

# 若已存在目标表可跳过此步:将CSV导入临时表
duckdb.sql("CREATE TEMP TABLE test AS SELECT * FROM 'test.csv'")

# 获取表的所有列名
columns = [col[0] for col in duckdb.sql("SELECT column_name FROM information_schema.columns WHERE table_name = 'test'").fetchall()]

# 构造SELECT子句:为含空格的列添加下划线命名的别名
select_clause = ", ".join(
    f"`{col}` AS {col.replace(' ', '_')}" if ' ' in col else col
    for col in columns
)

# 执行查询得到列名替换后的结果
result = duckdb.sql(f"SELECT {select_clause} FROM test")
print(result)

输出结果:

┌───────┬──────────────┐
│  id   │ company_name │
│ int64 │   varchar    │
├───────┼──────────────┤
│     1 │ Walmart      │
│     2 │ Amazon       │
│     3 │ Apple        │
└───────┴──────────────┘

方法2:直接使用DuckDB关系型API

操作DuckDB原生的Relation对象,通过投影方法批量修改列别名:

import duckdb

# 读取CSV获取关系对象
rel = duckdb.sql("SELECT * FROM 'test.csv'")

# 遍历列并替换空格为下划线,生成新的关系对象
new_rel = rel.project(
    ", ".join(
        f"`{col.name}` AS {col.name.replace(' ', '_')}" if ' ' in col.name else col.name
        for col in rel.columns
    )
)

# 查看结果
print(new_rel)

该方法完全基于DuckDB关系型API实现,无需中间格式转换,契合你的需求。


内容的提问来源于stack exchange,提问作者prrao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:10:53