You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:25:08