Pandas写入混合分隔数据到CSV时如何让key占单个Excel单元格
修复CSV中字典key被Excel拆分到多单元格的问题
问题原因
CSV格式默认使用逗号作为字段分隔符,直接写入的字符串如果包含逗号、空格等符号,Excel打开时会自动将其拆分到多个单元格。按照CSV标准规则,被半角双引号包裹的内容会被识别为单个字段,内容内部的所有分隔符、空格都会被当作普通文本处理,不会触发拆分。
修复方案
只需要修改写入字典key的代码行,给key外层包裹半角双引号即可,同时要对key本身包含的双引号做转义(CSV中转义双引号的规则是用两个连续的双引号表示一个原义双引号)。
修改后的完整代码如下:
import pandas as pd df = pd.read_csv('test.batch.csv') print(df) # Creating a dictionary data = {'Value':[0,0,0]} kernel_df = pd.DataFrame(data, index=['M1','M2','M3']) my_dict = {'dummy':kernel_df} for name, df_group in df.groupby('Name'): my_dict[name] = pd.concat( [g.reset_index(drop=True) for _, g in df_group.groupby('ID')['Value']], axis=1 ) print(my_dict) with open('output.csv', 'w') as f: for key in my_dict.keys(): # 给key外层包裹双引号,同时转义key内部的双引号 escaped_key = key.replace('"', '""') f.write(f'"{escaped_key}"\n') df2 = my_dict[key] df2.to_csv(f)
效果验证
修改后输出的CSV纯文本中,key所在行都会被双引号包裹,如下示例:
"dummy" ,Value M1,0 M2,0 M3,0 "K1::foo(bar::z(x,u))" ,Value,Value 0,10,2 1,5,2 2,10,2 "K2::foo()" ,Value 0,20 1,10 2,15
Excel打开时,所有key都会完整显示在第一列的单个单元格中,后续表格内容的拆分逻辑不受任何影响。
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

