数据框中文本列的对齐方式不清楚

Alignment of text column in dataframe unclear

我有一个包含文本列的数据框。文本列包含使用 unicode 字符“\u0336”删除的文本。在那种情况下,对齐会被弄乱。为什么?我该如何解决这个问题?

if __name__ == '__main__':
    import pandas as pd

    phenotype = {0: 0, 1: 0}
    text = ''.join(x + '\u0336' for x in str(phenotype))

    data = {"phenotype": [f"{phenotype}", text]}
    print(pd.DataFrame(data=data).to_string(justify="right"))

结果:

                  phenotype
0              {0: 0, 1: 0}
1  {̶0̶:̶ ̶0̶,̶ ̶1̶:̶ ̶0̶}̶

预计:

      phenotype
0  {0: 0, 1: 0}
1  {̶0̶:̶ ̶0̶,̶ ̶1̶:̶ ̶0̶}̶

使用组合个角色很勇敢,你被咬了

大多数显示的东西知道最常见的unicode字符,但是一旦字符数和显示位置数不同,就会出现奇怪的事情。

尽管具有不错的格式化功能,Pandas 主要是一个计算 工具。此外,它的底层存储是 numpy,这意味着它将非常擅长处理数字数据,而在处理字符串时效率较低。你试图做的不是 pandas 的意思。恕我直言,这确实是一个错误,您可以发送有关它的错误报告。不确定它是否会被修复以及为什么,因为它与核心目标无关。

表示已删除某些内容的预期方法是添加一个额外的布尔列,或者用 NaN 或空字符串替换该值,或者...但请不要尝试使用 COMBINING LONG STROKE覆盖 U+0336 unicode 字符。我可以确认像 IDLE 这样的 Tk 工具也没有正确处理它。

如果您使用 Jupyter,一种可能的方法是为此使用 HTML 样式。但它只适用于 Jupyter notebook...