繁体   English   中英

Python 日志记录不记录 pd.info()

[英]Python logging does not log pd.info()

import logging
import pandas as pd

logger = logging.getLogger('train')
logger.setLevel(logging.DEBUG)

# Data
data = {'Name': ['Tom', 'nick', 'krish', 'jack'], 'Age': [20, 21, 19, 18]}

# Create DataFrame
df = pd.DataFrame(data)

logger.info(type(df))
logger.info(df.info())
.
.
.
<other_processes>
.

上面的代码输出:

<class 'pandas.core.frame.DataFrame'>
None
.
.
.

在日志的末尾(在所有其他进程之后),它还输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
Name    4 non-null object
Age     4 non-null int64
dtypes: int64(1), object(1)
memory usage: 144.0+ bytes

为什么当我尝试记录 df.info() 时它打印None 如何在日志中的预期位置获取 df.info()?

使用.getvalue()DataFrame.info中的缓冲区参数更改为StringIO

from io import StringIO
buf = StringIO()
df.info(buf=buf)

logger.info(type(df))    
logger.info(buf.getvalue())

使用jezrael的解决方案,我创建了一个 function ,只要需要记录 df.info() 就可以调用它。

def log_table(df):
    buf = StringIO()
    df.info(buf=buf)
    logging.debug(type(df))
    logging.debug(buf.getvalue())

您可以使用f 字符串

logging.info(f"{df.info()}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM