在以下场景中,我想:
- 使用自定义字符替换缺失值,例如
-
- 应用数字的自定义格式
问题
我似乎只能实现其中一个目标。如果我使用下面的代码,我可以在格式化方面达到预期的结果;但是缺失值被打印为 nan
"""Handling Missing Data in Pandas / Tabulate
"""
import pandas as pd
from tabulate import tabulate
import seaborn as sns
import numpy as np
# Create sample data
iris_data = sns.load_dataset('iris')
# Derive summary table
iris_summary = pd.DataFrame.describe(iris_data, percentiles=[]).transpose()
# Add missing values
iris_summary.iloc[0, 1:6] = None
# Show missing data
print(tabulate(iris_summary, missingval="-",
floatfmt=(".0f", ".0f", ".3f", ".1f", ".4f", ".1f", ".0f")))
结果
------------ --- ------- ----- -------- ----- ---
sepal_length 150 nan nan nan nan nan
sepal_width 150 3.057 0.4 2.0000 3.0 4
petal_length 150 3.758 1.8 1.0000 4.3 7
petal_width 150 1.199 0.8 0.1000 1.3 2
------------ --- ------- ----- -------- ----- ---
尝试 1
我尝试替换缺失的值
iris_summary.replace(np.nan, "", inplace=True)
但是结果并不令人满意,因为数字格式丢失了:
------------ --- ------------------ ------------------ --- ---- ---
sepal_length 150
sepal_width 150 3.0573333333333337 0.4358662849366982 2.0 3.0 4.4
petal_length 150 3.7580000000000005 1.7652982332594662 1.0 4.35 6.9
petal_width 150 1.1993333333333336 0.7622376689603465 0.1 1.3 2.5
------------ --- ------------------ ------------------ --- ---- ---
期望的结果
我想要到达看起来休闲的 table :
------------ --- ------- ----- -------- ----- ---
sepal_length 150 - - - - -
sepal_width 150 3.057 0.4 2.0000 3.0 4
petal_length 150 3.758 1.8 1.0000 4.3 7
petal_width 150 1.199 0.8 0.1000 1.3 2
------------ --- ------- ----- -------- ----- ---
注释
tabulate
调用在输出 LaTeX 表的函数中使用。我的目的是看到解决方案灵活,因此tabulate
可以接收 pandas dataframe在不同位置缺少值,并将通过floatfmt
传递的格式正确应用于列中的其余值。
最佳答案
使用替换
:
print(tabulate(iris_summary.replace(np.nan, None), missingval='-',
floatfmt=(".0f", ".0f", ".3f", ".1f", ".4f", ".1f", ".0f")))
输出:
------------ --- ----- --- ------ --- -
sepal_length 150 - - - - -
sepal_width 150 3.057 0.4 2.0000 3.0 4
petal_length 150 3.758 1.8 1.0000 4.3 7
petal_width 150 1.199 0.8 0.1000 1.3 2
------------ --- ----- --- ------ --- -
我认为missingval
适用于None
值,但Pandas将None
转换为NaN
,其中列有float
dtype,因此您必须强制将 nan
替换为 None
才能获得预期的输出。
关于python - 正确处理缺失值和格式化 pandas 数据框打印以制表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71165558/