如何避免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
相关产品推荐
相关产品推荐

