Коротко
- Настройки меняются через
pd.set_option("display.…", значение)и действуют на всё отображение до конца программы. pd.option_context(...)в блокеwithменяет их временно — так безопаснее.- Длинная таблица (больше
max_rowsстрок) показывается сокращённо:min_rowsстрок по краям и.... - Настройки влияют только на вывод: данные не округляются и не обрезаются.
- Показать всё целиком без смены настроек —
df.to_string().
В этом справочнике
Перед каждым примером выполняются одни и те же настройки, чтобы вывод на сайте совпадал на любой машине. Без них pandas в терминале подстраивает число столбцов под ширину окна.
pd.set_option("display.width", 80)
pd.set_option("display.max_columns", 20)
pd.set_option("display.max_rows", 60)
pd.set_option("display.min_rows", 10)
pd.set_option("display.max_colwidth", 50)
pd.set_option("display.precision", 6)Настройки NumPy — в статье NumPy: настройки отображения.
Синтаксис
pd.set_option("display.max_rows", 100)
pd.get_option("display.max_rows")
pd.reset_option("display.max_rows")
with pd.option_context("display.max_rows", 10, "display.precision", 2):
print(df)
df.to_string(max_rows=None, index=True)Параметры
ПараметрЧто делаетПо умолчанию
display.max_rowsсколько строк можно показать целиком; больше — сокращение60display.min_rowsсколько строк показать при сокращении10display.max_columnsсколько столбцов показать; 0 — по ширине терминала0 в терминале, иначе 20display.widthширина вывода в символах80display.precisionзнаков после запятой у float6display.float_formatфункция форматирования float, например "{:,.2f}".formatNonedisplay.max_colwidthмаксимальная длина текста в ячейке50Примеры
orders = pd.DataFrame({
"order": range(1, 101),
"amount": [round(100 + i * 12.345, 3) for i in range(100)],
})orders # 100 строк > max_rows: показаны краяВывод
order amount 0 1 100.000 1 2 112.345 2 3 124.690 3 4 137.035 4 5 149.380 .. ... ... 95 96 1272.775 96 97 1285.120 97 98 1297.465 98 99 1309.810 99 100 1322.155 [100 rows x 2 columns]
with pd.option_context("display.max_rows", 6, "display.min_rows", 4):
print(orders)Вывод
order amount 0 1 100.000 1 2 112.345 .. ... ... 98 99 1309.810 99 100 1322.155 [100 rows x 2 columns]
with pd.option_context("display.float_format", "{:,.1f}".format):
print(orders.tail(3))Вывод
order amount 97 98 1,297.5 98 99 1,309.8 99 100 1,322.2
wide = pd.DataFrame([range(30)], columns=[f"c{i}" for i in range(30)])
wide # 30 столбцов > max_columnsВывод
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ... c20 c21 c22 c23 c24 c25 \ 0 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 c26 c27 c28 c29 0 26 27 28 29 [1 rows x 30 columns]
notes = pd.DataFrame({"note": ["Очень длинный комментарий покупателя о доставке и упаковке заказа"]})
with pd.option_context("display.max_colwidth", 25):
print(notes)Вывод
note 0 Очень длинный коммент...
print(orders.head(12).to_string(index=False, max_rows=6))Вывод
order amount
1 100.000
2 112.345
3 124.690
... ...
10 211.105
11 223.450
12 235.795Подводные камни
precision не округляет данные
Как и в NumPy, это только отображение. Округлить данные — df.round(2).
ratios = pd.DataFrame({"share": [1 / 3, 2 / 3, 1 / 7]})
with pd.option_context("display.precision", 2):
print(ratios)
ratios.loc[0, "share"] # данные не округленыВывод
share 0 0.33 1 0.67 2 0.14 np.float64(0.3333333333333333)
set_option в середине программы
Глобальная настройка меняет вывод во всём остальном коде, включая чужие функции. Для одного print используйте option_context.
pd.get_option("display.max_rows")Вывод
60