如何将含不同数据类型的Pandas DataFrame左对齐写入TXT文件
保留原始字符串格式左对齐写入TXT文件
需求说明
现有如下Pandas DataFrame:
import pandas as pd data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'], 'Column2': ['String1', 'String3', 101, 'String4']} df = pd.DataFrame(data)
需要将其写入TXT文件,要求:
- 仅用空格分隔列
- 所有列左对齐
- 第一列保留原始字符串格式(不自动转换为科学计数法或四舍五入)
目标输出格式如下:
------- Data -------- Column1 Column2 1e10 String1 123.1105 String3 0.5e-2 101 0 String4
现有问题
使用tabulate工具的代码会自动转换第一列的数值格式,且默认右对齐,不符合需求:
from tabulate import tabulate # Format dataframe into table table_content = tabulate(df.values.tolist(),tablefmt="plain") # Write the txt-file with open("example.txt", "w") as file: file.write("------- Data --------\n") file.write(table_content)
输出结果:
------- Data -------- Column1 Column2 1e+10 String1 123.111 String3 0.005 101 0 String4
高效解决方案
方法一:使用Pandas原生to_string方法
Pandas的to_string方法可以直接控制列对齐方式、列间距,并且保留原始字符串格式(需确保目标列为字符串类型):
import pandas as pd data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'], 'Column2': ['String1', 'String3', 101, 'String4']} df = pd.DataFrame(data) # 显式转换Column1为字符串类型,避免自动数值转换 df['Column1'] = df['Column1'].astype(str) # 生成格式化表格:左对齐、设置列间距、隐藏行索引 table_content = df.to_string(justify='left', col_space=8, index=False) # 写入文件 with open("example.txt", "w") as file: file.write("------- Data --------\n") file.write(table_content)
justify='left':强制所有列左对齐col_space=8:控制列之间的空格数量(可按需调整)index=False:不输出行索引,符合目标格式
方法二:手动计算列宽格式化(更灵活)
如果需要精确控制每列宽度,可手动计算列的最大长度,逐行拼接格式化字符串:
import pandas as pd data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'], 'Column2': ['String1', 'String3', 101, 'String4']} df = pd.DataFrame(data) # 转换所有列为字符串,统一处理格式 df_str = df.astype(str) # 计算每列的最大宽度(包含标题长度) col_widths = [max(len(col), df_str[col].str.len().max()) for col in df_str.columns] # 生成左对齐的标题行 header = ' '.join([f"{col:<{col_widths[i]}}" for i, col in enumerate(df_str.columns)]) # 生成左对齐的数据行 rows = [] for _, row in df_str.iterrows(): row_str = ' '.join([f"{val:<{col_widths[i]}}" for i, val in enumerate(row)]) rows.append(row_str) # 拼接所有内容 table_content = '\n'.join([header] + rows) # 写入文件 with open("example.txt", "w") as file: file.write("------- Data --------\n") file.write(table_content)
这种方式可以精准控制每列的宽度,确保对齐效果完全符合预期。
内容的提问来源于stack exchange,提问作者edgar
相关产品推荐
相关产品推荐

