Распечатать фрейм данных со столбцами по центру
Я хотел бы напечатать фрейм данных, где столбцы выровнены по центру. Ниже я попробовал, я думал, что печать фрейма данных test1 приведет к выравниванию столбцов в центре, но это не так. Есть мысли о том, как я могу это сделать?
test=data.frame(x=c(1,2,3),y=c(5,6,7))
names(test)=c('Variable 1','Variable 2')
test[,1]=as.character(test[,1])
test[,2]=as.character(test[,2])
test1=format(test,justify='centre')
print(test,row.names=FALSE,quote=FALSE)
Variable 1 Variable 2
1 5
2 6
3 7
print(test1,row.names=FALSE,quote=FALSE)
Variable 1 Variable 2
1 5
2 6
3 7
1 ответ
Проблема в том, что для того, чтобы это работало так, как вы ожидаете,width
"Аргумент должен быть также указан.
Вот пример:
test.1 <- data.frame(Variable.1 = as.character(c(1,2,3)),
Variable.2 = as.character(c(5,6,7)))
# Identify the width of the widest column by column name
name.width <- max(sapply(names(test.1), nchar))
format(test.1, width = name.width, justify = "centre")
# Variable.1 Variable.2
# 1 1 5
# 2 2 6
# 3 3 7
Но как этот подход работает со столбцами, где имена переменных имеют разную длину? Не так хорошо.
test.2 <- data.frame(A.Really.Long.Variable.Name = as.character(c(1,2,3)),
Short.Name = as.character(c(5,6,7)))
name.width <- max(sapply(names(test.2), nchar))
format(test.2, width = name.width, justify = "centre")
# A.Really.Long.Variable.Name Short.Name
# 1 1 5
# 2 2 6
# 3 3 7
Существует, конечно, обходной путь: измените "ширину" каждого имени переменной на равную длину, заполнив их пробелами (используя format()
)
orig.names <- names(test.2) # in case you want to restore the original names
names(test.2) <- format(names(test.2), width = name.width, justify = "centre")
format(test.2, width = name.width, justify = "centre")
# A.Really.Long.Variable.Name Short.Name
# 1 1 5
# 2 2 6
# 3 3 7
Вызовите эту функцию, чтобы получить фрейм данных для отображения так:
def pd_centered(df):
return df.style.set_table_styles([
{"selector": "th", "props": [("text-align", "center")]},
{"selector": "td", "props": [("text-align", "center")]}])
например:
display(pd_centered(original_df))
Это выровняет по центру как заголовки, так и фактические ячейки данных, и вы можете удалить td
или th
отключить любой из них, если хотите.