pandas导出csv时shop_ids列合并、user_id前导零丢失如何解决
pandas导出CSV字段格式异常解决方法
问题原因
你遇到的两个异常(user_id前导0丢失、shop_ids被拆分为带千分位的大数字)并非pandas导出逻辑出错,而是Excel、Numbers等表格软件打开CSV时默认将纯数字串识别为数值类型,自动做了格式化处理。你可以用记事本、VS Code等文本编辑器直接打开导出的CSV验证,原始导出内容其实已经符合你的预期。
解决方法
场景1:保持shop_ids为单列导出
先将两列转为字符串类型,导出时强制所有字段用双引号包裹,避免表格软件自动识别为数值:
import csv import pandas as pd # 强制转换字段为字符串类型 df['user_id'] = df['user_id'].astype(str) df['shop_ids'] = df['shop_ids'].astype(str) # 导出CSV df.to_csv( 'users_ordered_shops.csv', index=False, # 不导出索引列 quoting=csv.QUOTE_ALL, # 所有字段用双引号包裹,强制表格软件识别为文本 encoding='utf-8-sig' # 适配Excel的编码识别,避免乱码 )
场景2:将shop_ids拆分为多列导出
如果需要把逗号分隔的shop_ids拆成独立列存储,可以用以下代码:
import csv import pandas as pd # 转换user_id为字符串 df['user_id'] = df['user_id'].astype(str) # 拆分shop_ids为多列 shop_cols = df['shop_ids'].str.split(',', expand=True) # 重命名拆分后的列 shop_cols.columns = [f'shop_id_{i+1}' for i in range(shop_cols.shape[1])] # 合并为新表 result_df = pd.concat([df[['user_id']], shop_cols], axis=1) # 导出CSV result_df.to_csv( 'users_ordered_shops_expand.csv', index=False, quoting=csv.QUOTE_ALL, encoding='utf-8-sig' )
验证建议
导出后优先用文本编辑器打开确认内容正确性。如果需要用Excel编辑,不要直接双击打开CSV,而是通过Excel的「数据 > 自文本/CSV」功能导入,导入过程中将user_id、shop_id相关列的格式指定为「文本」即可完全避免自动格式化问题。
内容的提问来源于stack exchange,提问作者afs
相关产品推荐
相关产品推荐

