python 我可以在pandas中设置可变列宽吗?

zc0qhyus  于 2023-06-20  发布在  Python
关注(0)|答案(3)|浏览(180)

我在pandas数据框架中有几个包含长文本字符串的列,但我只对检查其中一个感兴趣。有没有一种方法可以使用沿着pd.set_option('max_colwidth', 60)的东西,但只用于单列,而不是扩展df中所有列的宽度?

sshcrbum

sshcrbum1#

如果你想在Jupyter Notebook中更改显示,你可以使用Style功能。要只对某些列使用此格式,只需根据subset参数指示要放大的列即可。这基本上是HTML和CSS。

### Test data
df = DataFrame({'text': ['foo foo foo foo foo foo foo foo', 'bar bar bar bar bar'],
                 'number': [1, 2]})

df.style.set_properties(subset=['text'], **{'width': '300px'})

wmvff8tz

wmvff8tz2#

我在较新版本的Pandas上找到的最简单的解决方案在Pandas参考资料的this page中概述。搜索display.max_colwidth--页面下三分之一的地方描述了如何使用它,例如:
pd.set_option('max_colwidth', 400)
请注意,这将设置会话的值,或直到更改。
如果您只想进行临时更改,请参阅this info临时设置上下文,例如:

from pandas import option_context

with option_context('display.max_colwidth', 400):
    display(df.head())

我还没有找到一种明显的方法来设置单个列,但是这种方法只会将那些需要更多空间的列扩展到您设置的最大值。
如果试图调整如何在屏幕上/表中/为其他列腾出空间,pd.set_option('precision', 2)也可能有用,它可以更改小数位数。

rm5edbpk

rm5edbpk3#

以下是对我有效的方法:
请记住,用您的数据替换payload

payload = {'col1': 'col1', 'col2': 'col2'}

df = pd.DataFrame(payload)

response = HttpResponse(content_type='application/xlsx')
response['Content-Disposition'] = f'attachment; filename="{filename}.xlsx"'
with pd.ExcelWriter(response) as writer:
    df.to_excel(writer, sheet_name=f'worksheet_name', index=False)
    # Manually adjust the width of column
    for column in df:
        column_width = max(df[column].astype(str).map(len).max(), len(column))
        col_idx = df.columns.get_loc(column)
        writer.sheets[f'worksheet_name'].set_column(col_idx, col_idx, column_width)

return response

相关问题