Python/Pandas:如何将pd.crosstab()结果写入文本文件?
问题分析与解决方案
代码1的问题
- 只执行了
pd.crosstab()计算交叉表,但完全没把结果写入文件的操作,文件里只会保留前面的日期和标题,交叉表内容根本没输出。
代码2的问题
open('FreqReport.txt', type)里的type是未定义的变量,得换成合法的文件打开模式(比如'w')- 循环写入时,直接转
str(freq1.iloc[i,:])会输出带Series格式和索引的杂乱内容,而且没有换行,所有内容会挤成一团。
简洁可靠的实现方式
直接用Pandas对象的to_string()方法,把交叉表转成格式化的字符串再写入,既省事又能保证表格格式清晰:
import pandas as pd import datetime today = datetime.date.today() df01 = pd.DataFrame(data={'col1':['A','B','A','B','A','B','A','B'],'col2':['C','C','D','C','C','C','D','C']}) # 计算交叉表 freq_table = pd.crosstab(index=df01['col1'], columns=df01['col2']) # 写入文件 with open('FreqReport.txt', 'w') as f: f.write(f"Date: {today}\n") f.write("Number of Widgets by Day\n\n") # 加空行分隔标题和表格,更易读 f.write(freq_table.to_string()) # 直接写入格式化好的表格
自定义格式的实现(可选)
如果想要更个性化的表格样式,可以手动处理表头和每行内容:
import pandas as pd import datetime today = datetime.date.today() df01 = pd.DataFrame(data={'col1':['A','B','A','B','A','B','A','B'],'col2':['C','C','D','C','C','C','D','C']}) freq_table = pd.crosstab(index=df01['col1'], columns=df01['col2']) with open('FreqReport.txt', 'w') as f: f.write(f"Date: {today}\n") f.write("Number of Widgets by Day\n\n") # 写入表头 f.write(f"{'Index':<5} " + " ".join([f"{col:<5}" for col in freq_table.columns]) + "\n") # 写入分隔线 f.write("-" * (5 + len(freq_table.columns)*6) + "\n") # 逐行写入数据 for idx, row in freq_table.iterrows(): f.write(f"{idx:<5} " + " ".join([f"{val:<5}" for val in row.values]) + "\n")
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

