반응형
주피터 노트북 디스플레이 로깅을 전환하는 방법
저는 주피터 노트북의 기능에 로깅을 적용하려고 합니다. 로깅 INFO가 활성화된 경우에만 데이터 프레임이 표시되도록 코드의 마지막 줄을 편집하려면 어떻게 해야 합니까? 현재 로깅이 활성인지 비활성인지 표시됩니다.
import pandas as pd
logging.basicConfig(level=logging.INFO, format=' %(asctime)s - %(levelname)s - %(message)s')
filename = 'test.csv'
df=pd.read_csv(filename, index_col=None, encoding='utf-8')
logging.info(display(df))
현재 로깅이 활성인지 비활성인지 표시됩니다.
의 주장을 바꾸면 결과가 바뀌지 않는다는 것을 말씀하시는 것 같습니다. 저도 그런 일이 있어요. 를 확인한 후, 다음과 같은 해결책을 제시할 수 있습니다:
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(format=' %(asctime)s - %(levelname)s - %(message)s')
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.debug("\n"+str(df))
logger.info("\n"+str(df))
logger.warning("\n"+str(df))
logger.error("\n"+str(df))
logger.critical("\n"+str(df))
잘 되는지 확인하기 위해 가지고 놀면 된다.
그리고 @Achampion이 말하는 것처럼 어쨌든 불려질 것이기 때문에, 나는 대체하곤 했다.
출력:
2019-01-18 14:20:47,710 - DEBUG -
a b c
0 1 4 7
1 2 5 8
2 3 6 9
2019-01-18 14:20:47,715 - INFO -
a b c
0 1 4 7
1 2 5 8
2 3 6 9
2019-01-18 14:20:47,720 - WARNING -
a b c
0 1 4 7
1 2 5 8
2 3 6 9
2019-01-18 14:20:47,724 - ERROR -
a b c
0 1 4 7
1 2 5 8
2 3 6 9
2019-01-18 14:20:47,728 - CRITICAL -
a b c
0 1 4 7
1 2 5 8
2 3 6 9
현재 수용된 답변은 데이터 프레임의 표현을 보여주는 반면, 나는 OP가 IPython html repr을 기록하는 것에 관심이 있었다고 생각한다. 이는 다음과 같은 사용자 정의를 통해 달성할 수:
import logging
class DisplayHandler(logging.Handler):
def __init__(self):
super().__init__()
self.addFilter(lambda record: hasattr(record.msg, '_repr_html_'))
def emit(self, record):
display(record.msg)
logging.basicConfig()
logger = logging.getLogger()
logger.addHandler(DisplayHandler())
이제 표시는 로그 수준에 따라 달라집니다:
import pandas as pd
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
logger.info(df)
는 아무것도 표시하지 않지만 경고의 경우 데이터 프레임이 표시됩니다:
logger.warning(df)
이제 기본 처리기와 사용자 지정 처리기 모두 데이터 프레임을 처리합니다. 기본 처리기에서 필터링하기 위해 우리는 할 수 있습니다
logger.handlers[0].addFilter(lambda record: not hasattr(record.msg, '_repr_html_'))
이제 우리는
logger.warning(df)
html repr을 가진 개체(예: matplotlib 도형)에 대해서도 동일한 핸들러가 작동합니다:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(3, 2))
x = np.arange(0., 10., 0.2)
plt.plot(x, np.sin(x))
logger.warning(fig)
반응형
'개발하자' 카테고리의 다른 글
{#wait}을(를) 다시 실행하는 방법...} 스벨테에서? (0) | 2023.11.11 |
---|---|
Svelte에서 팝업 외부를 클릭하는 동안 모드 팝업 닫기 (0) | 2023.11.10 |
테라폼에서 트리거 임계값과 메트릭_트리거 임계값의 차이 (1) | 2023.11.09 |
Typescript 일반 JSX 인수와 함께 React forwardRef 사용 (0) | 2023.11.08 |
FastApi에서 Asyncio 하위 프로세스를 실행하면 구현되지 않은 오류가 발생함 (0) | 2023.11.08 |