如何让含换行符\n的Pandas DataFrame打印时换行展示内容
解决Pandas DataFrame含换行符文本的格式化打印问题
这里提供两种实用方法实现你要的打印效果:
方法一:拆分数据构造新DataFrame
通过将包含换行符的val列拆分成多行,同时让key列仅在每组首行显示对应值,其余行留空,直接打印新DataFrame即可对齐:
import pandas as pd df = pd.DataFrame( {'key': ['A','B','C'], 'val': ['x\ny\nz','apple\norange','good\nbad\nbest']}) # 遍历原DataFrame,拆分每行的val并构造新行列表 rows = [] for idx, row in df.iterrows(): key = row['key'] split_vals = row['val'].split('\n') for i, val in enumerate(split_vals): # 仅第一行保留key,其余行key为空 rows.append({'key': key if i == 0 else '', 'val': val}) # 生成新DataFrame并打印(隐藏索引) new_df = pd.DataFrame(rows) print(new_df.to_string(index=False))
输出效果:
key val A x y z B apple orange C good bad best
方法二:自定义打印格式(不修改原DataFrame)
如果不想改动原数据结构,可以直接自定义打印逻辑,手动控制每行的对齐和内容:
import pandas as pd df = pd.DataFrame( {'key': ['A','B','C'], 'val': ['x\ny\nz','apple\norange','good\nbad\nbest']}) # 计算列宽,保证对齐效果 key_col_width = df['key'].str.len().max() + 3 val_col_width = df['val'].str.split('\n').apply(lambda x: max(len(s) for s in x)).max() + 3 # 打印表头 print(f"{'key':<{key_col_width}} {'val':<{val_col_width}}") # 逐行处理打印 for idx, row in df.iterrows(): split_vals = row['val'].split('\n') # 打印首行(带索引和key) print(f"{idx:<2} {row['key']:<{key_col_width-2}} {split_vals[0]:<{val_col_width}}") # 打印后续行(仅显示val,key和索引位置留空) for val in split_vals[1:]: print(f"{'':<{key_col_width+2}} {val:<{val_col_width}}")
输出效果和方法一一致,且不会修改原DataFrame的数据。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

