Почему я Python .display.display отображаю выходные данные в другом порядке, если указан в виде списка? - PullRequest
1 голос
/ 27 марта 2020
def inspect_df(df):
    results = (df.head(), df.tail(), df.info(), df.describe(include='all'),)
    for result in results:
        display(result)

df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})

inspect_df(df)

Обратите внимание, что df.info() является третьим элементом в результатах. Тем не менее, это выводит информацию сначала, а затем остальные элементы. Как я могу заставить его печатать выходные данные в указанном порядке?

order with list

Но вместо этого, если я явно вызываю дисплей (без списка), он правильно отображает:

def inspect_df(df):
    display(df.head())
    display(df.tail())
    display(df.info())
    display(df.describe(include='all'))

df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})

inspect_df(df)

order without list

1 Ответ

1 голос
/ 27 марта 2020

Это связано с тем, что df.info() не возвращает ничего, кроме печати информации, временным решением будет сохранение информации в виде строки, а затем сохранение ее в results для итерации;

import io
buffer = io.StringIO()
df.info(buf=buffer)
info_string = buffer.getvalue()

def inspect_df(df):
    results = (df.head(), df.tail(), info_string , df.describe(include='all'),)
    for result in results:
        print(result)

df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})

inspect_df(df)

   x  y
0  1  4
1  2  5
2  3  6
   x  y
0  1  4
1  2  5
2  3  6
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
x    3 non-null int64
y    3 non-null int64
dtypes: int64(2)
memory usage: 176.0 bytes

         x    y
count  3.0  3.0
mean   2.0  5.0
std    1.0  1.0
min    1.0  4.0
25%    1.5  4.5
50%    2.0  5.0
75%    2.5  5.5
max    3.0  6.0
...