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

如何更简洁Pythonic地用logging记录Pandas DataFrame切片?

简洁实现Pandas DataFrame的Logging记录

核心思路

无需手动循环拆分DataFrame,利用pandas.DataFrame.to_string()将DataFrame格式化为对齐文本,按行拆分后结合logging级别统一输出,同时通过参数灵活控制显示行数。

实现代码示例

import logging
import pandas as pd

# 统一配置logging(按需调整日志文件、格式、全局级别)
logging.basicConfig(
    filename='data_processing.log',
    level=logging.DEBUG,
    format='%(asctime)s %(levelname)s: %(message)s',
    datefmt='%y%m%d %H:%M:%S'
)

def log_dataframe(df, level=logging.INFO, max_rows=10):
    """将DataFrame按指定日志级别输出,支持行数控制"""
    # 截取目标行数的DataFrame切片
    df_slice = df.head(max_rows) if len(df) > max_rows else df
    # 格式化为列对齐的文本(去掉索引,左对齐)
    formatted_df = df_slice.to_string(index=False, justify='left')
    # 按行拆分后逐行输出,自动带上日志元数据
    for line in formatted_df.split('\n'):
        logging.log(level, line)

# 测试用例
if __name__ == '__main__':
    # 构造测试DataFrame
    test_data = {
        'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
        'Age': [25, 30, 35, 40, 45],
        'City': ['New York', 'London', 'Paris', 'Tokyo', 'Sydney']
    }
    df = pd.DataFrame(test_data)

    # 用INFO级别记录前3行
    log_dataframe(df, level=logging.INFO, max_rows=3)
    # 用DEBUG级别记录全部行
    log_dataframe(df, level=logging.DEBUG, max_rows=len(df))
    # 常规日志消息
    logging.info('数据切片记录完成')

关键细节说明

  • 统一日志配置:通过basicConfig一次性配置日志文件、格式和全局级别,确保DataFrame日志与其他日志的元数据(时间、级别)完全一致。
  • 灵活控制输出:
    • 用max_rows参数精准控制日志中显示的DataFrame行数,避免冗余输出。
    • 用level参数指定日志级别,和普通日志消息的Verbosity规则统一(比如全局级别设为INFO时,DEBUG级别的DataFrame日志不会被输出)。
  • 格式化保障:to_string(index=False, justify='left')生成列对齐的文本,去掉不必要的索引列,保证日志可读性。

日志文件输出示例

240102 10:58:20 INFO: Name    Age City    
240102 10:58:20 INFO: Alice   25  New York
240102 10:58:20 INFO: Bob     30  London  
240102 10:58:20 INFO: Charlie 35  Paris   
240102 10:58:20 DEBUG: Name    Age City    
240102 10:58:20 DEBUG: Alice   25  New York
240102 10:58:20 DEBUG: Bob     30  London  
240102 10:58:20 DEBUG: Charlie 35  Paris   
240102 10:58:20 DEBUG: David   40  Tokyo   
240102 10:58:20 DEBUG: Eve     45  Sydney  
240102 10:58:20 INFO: 数据切片记录完成

内容的提问来源于stack exchange,提问作者Timur Shtatland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:02:13