如何避免Python中实时输出DataFrame时反复出现重复列名
问题原因
你当前的代码每次循环都会创建独立的新DataFrame,每次调用display()都会完整输出新DF的列名+行内容,因此列名会随着输出次数重复出现。同时原代码存在while循环内部代码没有缩进的语法错误,也需要同步修正。
解决方法
这里提供两种常用场景的解决方案:
方案1:统一存储所有历史数据,仅显示一次列名
该方案将所有时间记录追加到同一个DataFrame中,仅在最顶部显示一次列名,保留所有历史输出记录:
import time import pandas as pd from datetime import datetime import pytz from IPython.display import clear_output # 提前初始化空DataFrame,设置列名 df = pd.DataFrame(columns=['Datetime']) IST = pytz.timezone('Asia/Kolkata') while True: datetime_ist = datetime.now(IST) Datetime = datetime_ist.strftime('%Y/%m/%d %H:%M:%S') # 向已有DF追加新行 df.loc[len(df)] = [Datetime] # 清空之前的输出,避免重复打印整个DF历史 clear_output(wait=True) display(df) time.sleep(1)
方案2:仅显示最新一行时间,不需要历史记录
该方案每次只输出最新的一行数据,首次输出显示列名,后续输出隐藏列名,适合仅需要查看实时时间的场景:
import time import pandas as pd from datetime import datetime import pytz IST = pytz.timezone('Asia/Kolkata') # 新增标记位,控制是否显示列名 show_header = True while True: datetime_ist = datetime.now(IST) Datetime = datetime_ist.strftime('%Y/%m/%d %H:%M:%S') df = pd.DataFrame([Datetime], columns=['Datetime']) display(df if show_header else df.style.hide(axis='columns')) # 第一次输出后就关闭列名显示 if show_header: show_header = False time.sleep(1)
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

