标签归档:alignment

格式化输出字符串,右对齐

问题:格式化输出字符串,右对齐

我正在处理一个包含坐标x,y,z的文本文件

     1      128  1298039
123388        0        2
....

每行使用

words = line.split()

处理完数据后,我需要将坐标写回到另一个txt文件中,以使每一列中的项目(以及输入文件)都正确对齐。每行由坐标组成

line_new = words[0]  + '  ' + words[1]  + '  ' words[2].

std::setw()C ++中是否有任何类似操纵器的控件可以设置宽度和对齐方式?

I am processing a text file containing coordinates x, y, z

     1      128  1298039
123388        0        2
....

every line is delimited into 3 items using

words = line.split()

After processing data I need to write coordinates back in another txt file so as items in each column are aligned right (as well as the input file). Every line is composed of the coordinates

line_new = words[0]  + '  ' + words[1]  + '  ' words[2].

Is there any manipulator like std::setw() etc. in C++ allowing to set the width and alignment?


回答 0

使用更新的str.format语法尝试这种方法:

line_new = '{:>12}  {:>12}  {:>12}'.format(word[0], word[1], word[2])

以下是使用旧%语法(对不支持的旧版本Python有用str.format)的方法:

line_new = '%12s  %12s  %12s' % (word[0], word[1], word[2])

Try this approach using the newer str.format syntax:

line_new = '{:>12}  {:>12}  {:>12}'.format(word[0], word[1], word[2])

And here’s how to do it using the old % syntax (useful for older versions of Python that don’t support str.format):

line_new = '%12s  %12s  %12s' % (word[0], word[1], word[2])

回答 1

可以使用rjust以下方法实现:

line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)

It can be achieved by using rjust:

line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)

回答 2

您可以像这样对齐它:

print('{:>8} {:>8} {:>8}'.format(*words))

其中>表示“ 向右对齐 ”,8是特定值的宽度

这是一个证明:

>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
    print('{:>8} {:>8} {:>8}'.format(*line))


       1      128  1298039
  123388        0        2

附言 *line表示该line列表将被解压缩,因此其.format(*line)工作方式类似于.format(line[0], line[1], line[2])(假设line一个仅包含三个元素的列表)。

You can align it like that:

print('{:>8} {:>8} {:>8}'.format(*words))

where > means “align to right” and 8 is the width for specific value.

And here is a proof:

>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
    print('{:>8} {:>8} {:>8}'.format(*line))


       1      128  1298039
  123388        0        2

Ps. *line means the line list will be unpacked, so .format(*line) works similarly to .format(line[0], line[1], line[2]) (assuming line is a list with only three elements).


回答 3

我真的很喜欢Python 3.6+中的新文字字符串插值:

line_new = f'{word[0]:>12}  {word[1]:>12}  {word[2]:>12}'

参考:PEP 498-文字字符串插值

I really enjoy a new literal string interpolation in Python 3.6+:

line_new = f'{word[0]:>12}  {word[1]:>12}  {word[2]:>12}'

Reference: PEP 498 — Literal String Interpolation


回答 4

这是使用“ f-string”格式进行格式化的另一种方法:

print(
    f"{'Trades:':<15}{cnt:>10}",
    f"\n{'Wins:':<15}{wins:>10}",
    f"\n{'Losses:':<15}{losses:>10}",
    f"\n{'Breakeven:':<15}{evens:>10}",
    f"\n{'Win/Loss Ratio:':<15}{win_r:>10}",
    f"\n{'Mean Win:':<15}{mean_w:>10}",
    f"\n{'Mean Loss:':<15}{mean_l:>10}",
    f"\n{'Mean:':<15}{mean_trd:>10}",
    f"\n{'Std Dev:':<15}{sd:>10}",
    f"\n{'Max Loss:':<15}{max_l:>10}",
    f"\n{'Max Win:':<15}{max_w:>10}",
    f"\n{'Sharpe Ratio:':<15}{sharpe_r:>10}",
)

这将提供以下输出:

Trades:              2304
Wins:                1232
Losses:              1035
Breakeven:             37
Win/Loss Ratio:      1.19
Mean Win:           0.381
Mean Loss:         -0.395
Mean:               0.026
Std Dev:             0.56
Max Loss:          -3.406
Max Win:             4.09
Sharpe Ratio:      0.7395

您在这里的意思是第一列的长度为15个字符,并且左对齐,第二列的值(长度)为10个字符,并且右对齐。

Here is another way how you can format using ‘f-string’ format:

print(
    f"{'Trades:':<15}{cnt:>10}",
    f"\n{'Wins:':<15}{wins:>10}",
    f"\n{'Losses:':<15}{losses:>10}",
    f"\n{'Breakeven:':<15}{evens:>10}",
    f"\n{'Win/Loss Ratio:':<15}{win_r:>10}",
    f"\n{'Mean Win:':<15}{mean_w:>10}",
    f"\n{'Mean Loss:':<15}{mean_l:>10}",
    f"\n{'Mean:':<15}{mean_trd:>10}",
    f"\n{'Std Dev:':<15}{sd:>10}",
    f"\n{'Max Loss:':<15}{max_l:>10}",
    f"\n{'Max Win:':<15}{max_w:>10}",
    f"\n{'Sharpe Ratio:':<15}{sharpe_r:>10}",
)

This will provide the following output:

Trades:              2304
Wins:                1232
Losses:              1035
Breakeven:             37
Win/Loss Ratio:      1.19
Mean Win:           0.381
Mean Loss:         -0.395
Mean:               0.026
Std Dev:             0.56
Max Loss:          -3.406
Max Win:             4.09
Sharpe Ratio:      0.7395

What you are doing here is you are saying that the first column is 15 chars long and it’s left justified and second column (values) is 10 chars long and it’s right justified.


回答 5

输出的简单列表:

a = 0.3333333
b = 200/3
print("variable a    variable b")
print("%10.2f    %10.2f" % (a, b))

输出:

variable a    variable b
      0.33         66.67

%10.2f: 10是最小长度,2是小数位数。

Simple tabulation of the output:

a = 0.3333333
b = 200/3
print("variable a    variable b")
print("%10.2f    %10.2f" % (a, b))

output:

variable a    variable b
      0.33         66.67

%10.2f: 10 is the minimum length and 2 is the number of decimal places.


回答 6

要使用f字符串并控制尾随数字的数量,请执行以下操作:

print(f'A number -> {my_number:>20.5f}')

To do it by using f-string and with control of the number of trailing digits:

print(f'A number -> {my_number:>20.5f}')

Pandas 灵活而强大的Python数据分析/操作库


Pandas:功能强大的Python数据分析工具包

那是什么?

Pandas 是一个Python包,它提供了快速、灵活和富有表现力的数据结构,旨在使处理“关系”或“标记”数据变得既简单又直观。旨在成为做实、做实挡路的基础性高水平建设。真实世界Python中的数据分析。此外,它还有更广泛的目标,即成为以任何语言提供的最强大、最灵活的开源数据分析/操作工具它已经在朝着这个目标前进了很久。

主要功能

以下是熊猫擅长的几件事:

  • 轻松处理missing data(表示为NaNNA,或NaT)在浮点和非浮点数据中
  • 大小可变:列可以是inserted and
    deleted
    来自DataFrame和高维对象
  • 自动和显式data alignment:对象可以显式地与一组标签对齐,或者用户可以简单地忽略标签并让SeriesDataFrame等在计算中自动对齐数据。
  • 强大、灵活group by对数据集执行拆分-应用-合并操作的功能,用于聚合和转换数据
  • 搞定easy to convert将其他Python和NumPy数据结构中的参差不齐、索引不同的数据转换为DataFrame对象
  • 基于智能标签的slicingfancy
    indexing
    ,以及subsetting大型数据集的
  • 直观mergingjoining数据集
  • 灵活性reshapingpivoting数据集的
  • Hierarchical轴的标签(每个刻度可以有多个标签)
  • 用于从以下位置加载数据的强大IO工具flat files(csv和分隔),Excel filesdatabases,以及从超高速数据库保存/加载数据HDF5 format
  • Time series-特定功能:日期范围生成和频率转换、移动窗口统计、日期移动和滞后

在哪里买到它?

源代码目前托管在GitHub上,地址为:https://github.com/pandas-dev/pandas

最新发布版本的二进制安装程序可在Python
Package Index (PyPI)
和OnConda

# conda
conda install pandas
# or PyPI
pip install pandas

依赖项

请参阅full installation instructions有关必需、建议和可选依赖项的最低支持版本

从源安装

要从源头安装熊猫,您需要Cython除了上面的正常依赖关系之外。Cython可以从PyPI安装:

pip install cython

pandas目录(与您在克隆git存储库后找到此文件的目录相同),执行:

python setup.py install

或用于安装在development mode

python -m pip install -e . --no-build-isolation --no-use-pep517

如果你有make,您也可以使用make develop要运行相同的命令,请执行以下操作

或者另选地

python setup.py develop

请参阅的完整说明installing from source

许可证

BSD 3

文档

官方文档托管在PyData.org上:https://pandas.pydata.org/pandas-docs/stable

背景

工作于pandas开始于AQR(一家量化对冲基金)于2008年成立,此后一直在积极发展

获取帮助

对于用法问题,最好的去处是StackOverflow此外,一般问题和讨论也可以在pydata mailing list

研讨与发展

在这次回购中,大多数开发讨论都是在gihub上进行的。此外,pandas-dev mailing list也可用于专门的讨论或设计问题,并且Gitter channel可用于解决与快速开发相关的问题

为熊猫做出贡献

欢迎所有贡献、错误报告、错误修复、文档改进、增强和想法

有关如何做出贡献的详细概述,请参阅contributing guide还有一个overview关于GitHub

如果您只是想开始使用PANDA代码库,请导航到GitHub “issues” tab开始研究有趣的问题。下面列出了许多问题Docsgood first issue在那里你可以开始

您还可以对问题进行分类,这可能包括重现错误报告,或要求提供重要信息,如版本号或重现说明。如果您想要开始对问题进行分类,一种简单的开始方法是subscribe to pandas on CodeTriage

或者,通过使用熊猫,你可能有了自己的想法,或者正在文档中寻找一些东西,并认为“这可以改进”。你可以做些什么!

您可以随时在mailing list或打开Gitter

作为这个项目的贡献者和维护者,你们应该遵守熊猫的行为准则。有关更多信息,请访问:Contributor Code of Conduct