如何不转换为Pyspark DataFrame 实现Pandas DataFrame按Pyspark样式打印表格
实现Pandas DataFrame输出PySpark风格表格的脚本
以下是可直接复用的实现代码:
import pandas as pd def to_pyspark_style(df: pd.DataFrame, show_index: bool = False, **kwargs) -> str: # 可选是否展示索引列 if show_index: df = df.reset_index() # 计算每列的最大宽度(取列名长度、列值转字符串后长度的最大值) col_widths = [] for col in df.columns: max_val_len = df[col].apply(lambda x: len(str(x))).max() col_width = max(len(str(col)), max_val_len) col_widths.append(col_width) # 构造表头行 header_parts = [f"{col:>{width}}" for col, width in zip(df.columns, col_widths)] header = "|" + "|".join(header_parts) + "|" # 构造分隔线 separator_parts = ["-" * width for width in col_widths] separator = "+" + "+".join(separator_parts) + "+" # 构造数据行 data_rows = [] for _, row in df.iterrows(): row_parts = [f"{str(val):>{width}}" for val, width in zip(row, col_widths)] data_rows.append("|" + "|".join(row_parts) + "|") # 拼接所有内容 return "\n".join([header, separator] + data_rows) # 可选配置1:给Pandas DataFrame绑定自定义方法,调用更方便 pd.DataFrame.to_pyspark_string = to_pyspark_style # 可选配置2:重写原生to_string方法,支持你需要的style参数调用形式 original_to_string = pd.DataFrame.to_string def custom_to_string(self, *args, **kwargs): if kwargs.pop('style', None) == 'pyspark': return to_pyspark_style(self, *args, **kwargs) return original_to_string(self, *args, **kwargs) pd.DataFrame.to_string = custom_to_string
使用示例
# 构造测试数据 df = pd.DataFrame({ 'Id': [0, 1, 2], 'groupId': [24, 440875, 878242], 'matchId': [0, 1, 2], 'assists': [0, 1, 0] }) # 调用方式1:使用自定义绑定方法 print(df.to_pyspark_string()) # 调用方式2:和你示例完全一致的写法 print(df.to_string(style='pyspark'))
输出效果
| Id|groupId|matchId|assists| +---+-------+-------+-------+ | 0| 24| 0| 0| | 1| 440875| 1| 1| | 2| 878242| 2| 0|
如果需要展示行索引,调用时传入show_index=True参数即可。
内容的提问来源于stack exchange,提问作者Gonzalo Garcia
相关产品推荐
相关产品推荐

