具有以下数据帧:

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

我最接近这一点的是:

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 --------")
    file.write(table_content)

其中,输出为:

------- Data --------
Column1  Column2
  1e+10  String1
123.111  String3
  0.005  101
  0      String4

但是,第一列实际上应该被视为字符串:左对齐并按照指定的格式(这是另一个请求它的程序的输入).有没有办法有效地做到这一点?

推荐答案

您可以将第一列转换为字符串,然后使用str.ljust:

import pandas as pd

data = {
    'Column1': ['1e10', '123.1105', '0.5e-2', '0'],
    'Column2': ['String1', 'String3', 101, 'String4']
}
df = pd.DataFrame(data)
df = df.astype(str)
max_widths = [max(len(str(col)), *df[col].astype(str).apply(len)) for col in df.columns]
with open('example.txt', 'w') as file:
  file.write('------- Data --------\n')
  header = ' '.join(
      col.ljust(max_widths[i]) for i, col in enumerate(df.columns))
  file.write(header + '\n')
  for index, row in df.iterrows():
    row_str = ' '.join(
        str(value).ljust(max_widths[i]) for i, value in enumerate(row))
    file.write(row_str + '\n')

Output:

------- Data --------
Column1  Column2
1e10     String1
123.1105 String3
0.5e-2   101    
0        String4

Python相关问答推荐

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

需要计算60,000个坐标之间的距离

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

可变参数数量的重载类型(args或kwargs)

用Python解密Java加密文件

如何过滤包含2个指定子字符串的收件箱列名?

在np数组上实现无重叠的二维滑动窗口

Pre—Commit MyPy无法禁用非错误消息

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

实现自定义QWidgets作为QTimeEdit的弹出窗口

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

如何更新pandas DataFrame上列标题的de值?

如何更改groupby作用域以找到满足掩码条件的第一个值?

如何在Gekko中使用分层条件约束

计算机找不到已安装的库'

如何使用加速广播主进程张量?

每次查询的流通股数量

如何在Django模板中显示串行化器错误

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

如何在表单中添加管理员风格的输入(PDF)