如何在Great Tables中替换DataFrame的inf与nan值为短横或N/A
替换Great Tables中inf和nan的显示值
要让GT表格里的inf(无穷大)和nan(缺失值)显示为更易懂的标识,比如短横-或N/A,有两种实用方法:
方法1:预处理DataFrame替换值
直接在Pandas层面替换目标值,再传入GT生成表格,适合需要修改原始数据的场景:
import pandas as pd import numpy as np from great_tables import GT df = pd.DataFrame({'Foodbank': {0: 'study', 1: 'generation', 2: 'near', 3: 'sell', 4: 'former', 5: 'line', 6: 'ok', 7: 'field', 8: 'last', 9: 'really', 10: 'particularly', 11: 'must', 12: 'drive', 13: 'herself', 14: 'learn'}, '%(LY)': {0: -20.93, 1: -19.23, 2: -26.09, 3: 150.0, 4: 90.24, 5: -23.85, 6: np.nan, 7: np.inf, 8: np.inf, 9: np.inf, 10: np.inf, 11: -35.48, 12: np.nan, 13: np.nan, 14: -1.3}}) # 替换inf、-inf和nan为短横(-) df.replace([np.inf, -np.inf, np.nan], '-', inplace=True) # 生成GT表格 GT(df)
方法2:使用Great Tables内置格式化函数
不修改原始DataFrame,通过GT的fmt()方法自定义规则,同时还能对正常数值做格式化处理:
import pandas as pd import numpy as np from great_tables import GT df = pd.DataFrame({'Foodbank': {0: 'study', 1: 'generation', 2: 'near', 3: 'sell', 4: 'former', 5: 'line', 6: 'ok', 7: 'field', 8: 'last', 9: 'really', 10: 'particularly', 11: 'must', 12: 'drive', 13: 'herself', 14: 'learn'}, '%(LY)': {0: -20.93, 1: -19.23, 2: -26.09, 3: 150.0, 4: 90.24, 5: -23.85, 6: np.nan, 7: np.inf, 8: np.inf, 9: np.inf, 10: np.inf, 11: -35.48, 12: np.nan, 13: np.nan, 14: -1.3}}) # 自定义格式化函数 def format_col_values(val): if pd.isna(val): return 'N/A' elif val in [np.inf, -np.inf]: return '-' else: # 保留两位小数显示正常数值 return f"{val:.2f}" # 生成GT表格并应用格式化规则 GT(df).fmt( columns="%(LY)", fns=format_col_values )
两种方法对比
- 方法1操作简单,直接修改数据,适合后续还需使用处理后数据的场景;
- 方法2保留原始数据完整性,且能灵活控制数值显示格式,适合仅需美化表格展示的场景。
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

