如何高效将DataFrame的values行转为列并输出为CSV文件?
问题
我有一个结构如下的DataFrame:
category ID values A foo ABCDEF A baz GHIJKL B bar MNOPQR B biff STUVWX C bop YZABCD
所有values字段的长度均相同。我希望将ID和values列输出到CSV文件,但需将values的每个字符转为列,输出格式如下:
foo bar baz biff bop A G M S Y B H N T Z C I O U A D J P V B E K Q W C F L R X D
我目前想到的方法是创建numpy数组并逐个填充values列,再转为DataFrame后用pandas输出为CSV,以ID作为表头。但该方法效率极低,请问是否有更优/更快的实现方法?
优化实现方法
可以利用pandas的内置矢量化操作高效完成,避免手动填充数组的低效流程,具体步骤及代码如下:
实现代码
import pandas as pd # 构建示例DataFrame(实际使用时替换为你的数据源) df = pd.DataFrame({ 'category': ['A', 'A', 'B', 'B', 'C'], 'ID': ['foo', 'baz', 'bar', 'biff', 'bop'], 'values': ['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX', 'YZABCD'] }) # 核心处理逻辑:拆分字符、转置结构 result = ( df.set_index('ID')['values'] .str.split('', expand=True) .drop(0, axis=1) # 移除拆分产生的首空列 .T ) # 输出为CSV文件,分隔符可根据需求调整 result.to_csv('output.csv', sep='\t', index=False)
逻辑说明
- 设置索引:把
ID设为DataFrame的索引,后续转置后直接成为表头。 - 拆分字符:用
str.split('', expand=True)将每个values字符串按单个字符拆分,自动展开为多列,每列对应一个字符位置。 - 清理空列:拆分操作会在开头生成一个空字符串列,用
drop移除。 - 转置结构:通过
.T转置DataFrame,让原本按行排列的字符转为按行输出,完全匹配目标格式。
这种方法依赖pandas的内部优化,比手动循环填充数组效率高几个数量级,尤其适合处理大规模数据。
内容的提问来源于stack exchange,提问作者Whitehot
相关产品推荐
相关产品推荐

