显示 pandas DataFrame 时,如果字符串太长,则省略中间字符

Kex*_*iii 2 python pandas

在 Jupyter Notebook 中显示 DataFrame 时,如果字符串值太长,最后一个字符将被省略:

df = pd.DataFrame({'A':['ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ']})

display(df)
Run Code Online (Sandbox Code Playgroud)

输出:

A
0 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST...

我想改变行为,只在字符串太长时省略中间字符:

A
0 ABCDEFGHIJKLMNOPQRSTUVW...DEFGHIJKLMNOPQRSTUVWXYZ

是否可以?

Odd*_*spa 5

文档中,您可以构建自定义格式化程序。

def formatter(x):
  if isinstance(x, str):
    if len(x) > pd.options.display.max_colwidth:
      display_width = pd.options.display.max_colwidth 
      split = int((display_width-3) / 2)
      if display_width % 2: # if odd number
        return x[:split] + "..." + x[-split:]
      else:
        return x[:(split+1)] + "..." + x[-split:]
    else:
      return x
  return None
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

df.style.format(formatter)
Run Code Online (Sandbox Code Playgroud)
A
0 ABCDEFGHIJKLMNOPQRSTUVW...DEFGHIJKLMNOPQRSTUVWXYZ

这只是一种显示格式,因此数据不会改变。