我使用
pd.set_option("display.colheader_justify","right")
来设置列标题。但我找不到
pd.describe_option()
的数据选项。
如何设置数据框内每一列的数据显示为左或右对齐?或者,是否可以为整个行的数据显示定义一个格式模板?
我使用
pd.set_option("display.colheader_justify","right")
来设置列标题。但我找不到
pd.describe_option()
的数据选项。
如何设置数据框内每一列的数据显示为左或右对齐?或者,是否可以为整个行的数据显示定义一个格式模板?
to_string(justify-'left')
。- 但这将适用于所有列。另外,似乎只有当你的列名足够大,足以实际迫使该列中的条目被对齐时,这才会起作用。如果列名小而条目大,它就不会有任何对齐的效果。
如果你想改变Jupyter笔记本的显示,你可以使用 Style 功能。
# Test data
df = DataFrame({'text': ['foo', 'bar'],
'number': [1, 2]})
df.style.set_properties(**{'text-align': 'right'})
Alex
:
不幸的是,这对字符串不起作用,通过对上述例子进行
df.style.set_properties(**{'text-align': 'left'})
并检查文本数据列可以看出(它将保持右对齐)。
Hagrid67
:
替换代码0】现在似乎对我有用了,谢谢 - Pandas 0.22.0, Jupyter 4.4.0, Chrome 70.
如果你想对单个数据框架的列标题进行对齐,你可以通过
df.style.set_table_styles([ dict(selector='th', props=[('text-align', 'left')] ) ])
来实现。
Sylvain
:
要应用于一个列的子集,你可以使用子集参数。
.set_properties(subset=["col1", "col2"], **{'text-align': 'right'})
。
Hagbard
发布于
2017-08-19
0
人赞同
的答案。
@Romain
是伟大的,但我想总结一下一些意见。
# Test data
df = DataFrame({'text': ['foo', 'bar'],'number': [1, 2]})
dfStyler = df.style.set_properties(**{'text-align': 'left'})
dfStyler.set_table_styles([dict(selector='th', props=[('text-align', 'left')])])
将对齐所有的表格文本和列的标题也是如此。
yts61
:
文字只向左对齐,直到2048年,然后一切都恢复到右边。
Shah Vipul
发布于
2017-08-19
0
人赞同
pip3 install tabulate
from tabulate import tabulate
df = pd.DataFrame ({'Text': ['abcdef', 'x'], 'Value': [12.34, 4.2]})
print(tabulate(df, showindex=False, headers=df.columns))
Text Value
------ -------
abcdef 12.34
x 4.2
这将自动对齐pandas的标题和列数据,以达到良好的视图格式。
自动将pandas数据框架的列数据向左对齐。
移除pandas数据框架中的索引显示。
在页眉和列数据之间放置----。
Heelara
发布于
2017-08-19
0
人赞同
我需要以不同的方式证明一些列的合理性,而不是以同样的方式证明所有的列。因为在这个主题中没有提到,所以我想提醒一下存在的
the
subset
option
:
Styler.set_properties(subset=None, **kwargs)[source]
从与OP相同的例子来看,我们可以对 "文本 "列进行左对齐。
df = pd.DataFrame({'text': ['foo', 'bar'],
'number': [1, 2]})
dfStyler = df.style.set_properties(subset=['text'],**{'text-align': 'left'})
Federico Gentile
发布于
2017-08-19
0
人赞同
例如,如果你想将文本和标题都向左对齐,你可以使用。
df.style.set_properties(**{'text-align': 'left'}).set_table_styles([ dict(selector='th', props=[('text-align', 'left')] ) ])
这首先将文本设置在左边,然后是标题。
smci
:
这在控制台中不起作用(从pandas 0.25开始)。可能只在Jupyter上。
ascripter
发布于
2017-08-19
0
人赞同
Since solutions using
pandas.Styler
don't work in
console printing
(至少对我来说是这样),我想出了以下代码,使用
pandas 1.3.3
和一个数据框架的例子,打印
所有字符串列左对齐
(不含头盔)。
df = pd.DataFrame({'float': [0.123, 7],
'int': [3, 357676],
'str': ["hello world", "bye"],
'cat': pd.Series(["a", "bbb"], dtype="category"),
'bool': [True, False]
formatters = {}
for col in df.select_dtypes("object"):
len_max = df[col].str.len().max()
formatters[col] = lambda _: f"{_:<{len_max}s}"
print(df.to_string(formatters=formatters))
float int str cat bool
0 0.123 3 hello world a True
1 7.000 357676 bye bbb False
如果你还想让标题向左对齐,请添加justify='left'。由于某些原因,现在的页眉向左偏移了一个字符。some列,但不是所有的。
print(df.to_string(formatters=formatters, justify="left"))
float int str cat bool
0 0.123 3 hello world a True
1 7.000 357676 bye bbb False
然而,将这种模式应用到其他dtypes上却失败了(对于字符串列也是如此)。我不知道为什么会出现这种情况。请注意,下面通过astype添加了字符串转换,也在f-string里面。
formatters = {}
for col in df.columns:
len_max = df[col].astype(str).str.len().max()
formatters[col] = lambda _: f"{_!s:<{len_max}s}"
print(col, len_max)
print(df.to_string(formatters=formatters))
float int str cat bool
0 0.123 3 hello world a True
1 7.0 357676 bye bbb False
mozlingyu
发布于
2017-08-19
0
人赞同
你可以通过一个新的环境来控制它。
with pd.option_context('display.colheader_justify','right'):
Shahrokh Bah
发布于
2017-08-19
0
人赞同
我包了
@Hagbard
在一个函数中,只要我想在笔记本单元格上显示由英文文本组成的pandas数据框,就可以使用它的答案。
from pandas import DataFrame
def left_align(df: DataFrame):
left_aligned_df = df.style.set_properties(**{'text-align': 'left'})
left_aligned_df = left_aligned_df.set_table_styles(
[dict(selector='th', props=[('text-align', 'left')])]
return left_aligned_df
要显示一个数据框架,我只需这样写。
left_align(df.head())
注意事项。对于大型数据集,它可以打印出df的所有行和列。没有任何抽象的,所以Jupyter崩溃了!这就是为什么我用.head()或.tail()或其他一些限制来使用它)。
JS.
发布于
2017-08-19
0
人赞同
在我的情况下,我有一个围绕我的Pandas DataFrame的类包装器。 这使得我可以通过定制包装器的
__str__()
方法来对DataFrame的字符串输出进行左对齐。
下面是我如何解决我的应用问题的,基于
乌努特布的回答
到一个
类似问题
. Pandas DataFrame是由
self.data
引用的。
def __str__(self):
Return the test stats report as a single string
with left-justified columns.
# Columns containing boolean values need different format strings
# to avoid 'ValueError: Invalid format specifier' exceptions.
BOOL_COLUMNS = ['success',]
formatters = {}
for li in list(self.data.columns):
if li in BOOL_COLUMNS:
form = "{{!s:<5}}".format()
else:
max = self.data[li].str.len().max()
form = "{{:<{}s}}".format(max)