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

如何避免Pandas用to_csv导出CSV时的数据类型自动转换问题

解决Pandas导出CSV时将5MAR转为5-Mar的问题

核心原因

问题出在数据读取阶段:Pandas从Snowflake加载数据时,自动将COL1列的5MAR、5JUL识别为日期类型(datetime64),后续的astype(str)只是把日期对象转成了默认的日期字符串格式(带横杠),而非原始的大写缩写格式。

可行解决方案

方案1:读取数据时强制指定列类型为字符串(推荐)

在从Snowflake读取数据到DataFrame时,直接指定COL1为字符串类型,避免被自动解析为日期:

import pandas as pd
import snowflake.connector

# 建立Snowflake连接(示例配置)
conn = snowflake.connector.connect(
    user='your_user',
    password='your_password',
    account='your_account',
    warehouse='your_warehouse',
    database='your_db',
    schema='your_schema'
)

# 读取数据时强制COL1为字符串
df = pd.read_sql(
    "SELECT * FROM your_table",
    conn,
    dtype={'COL1': str}
)

# 导出CSV
df.to_csv('output.csv', sep=",", quotechar='"', index=False, encoding='utf-8')

方案2:已加载DataFrame的修复办法

如果数据已经加载到DataFrame,且COL1已被识别为日期类型,先将其转换回原始的DDMMM大写格式,再导出:

# 确认列类型,若为datetime64则执行转换
if df['COL1'].dtype == 'datetime64[ns]':
    # 转为DDMMM格式并大写
    df['COL1'] = df['COL1'].dt.strftime('%d%b').upper()

# 执行导出
df.to_csv('output.csv', sep=",", quotechar='"', index=False, encoding='utf-8')

方案3:导出时兜底处理

如果上述方法无效,可直接对列字符串格式做修正后导出:

# 针对已转成带横杠的字符串做替换,恢复原始格式
df['COL1'] = df['COL1'].str.replace('-', '').upper()

df.to_csv(
    'output.csv',
    sep=",",
    quotechar='"',
    index=False,
    encoding='utf-8'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:18:28