Как красиво отформатировать столбцы, значения в пандах, чтобы они стояли одинаковой ширины? - PullRequest
0 голосов
/ 11 октября 2019
for x in basic_data.columns:
    print( type(basic_data[x][4000]) , "\t\t\t\t\t", basic_data[x][4000])

и когда я его печатаю, он выглядит неравномерно, я хочу, чтобы оба столбца, тип и значение были одинаковой ширины друг от друга.

<class 'str'>                            ФАО ЦЕСНАБАНК г. Степногорск
<class 'str'>                            ежемесячно
<class 'str'>                            Стандартный
<class 'pandas._libs.tslibs.timestamps.Timestamp'>                           2015-06-01 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>                           2015-05-06 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>                           2017-05-06 00:00:00
<class 'numpy.float64'>                              220000.0
<class 'numpy.int64'>                            25
<class 'numpy.float64'>                              37.5
<class 'numpy.int64'>                            0
<class 'str'>                            Акмолинская Область
<class 'str'>                            Собственное
<class 'str'>                            Казахстан
<class 'str'>                            Потребительские цели
<class 'pandas._libs.tslibs.timestamps.Timestamp'>                           2015-05-06 00:00:00
<class 'numpy.int64'>                            24
<class 'numpy.float64'>                              6.0
<class 'pandas._libs.tslibs.timestamps.Timestamp'>                           2015-05-04 00:00:00
<class 'numpy.float64'>                              1.0
<class 'str'>                            Взнос наличными деньгами
<class 'str'>                            От 1 года  до 5 лет
<class 'numpy.float64'>                              1.0
<class 'numpy.float64'>                              33862.11

1 Ответ

2 голосов
/ 11 октября 2019

Может быть, есть лучший способ, но вы можете заметить, что максимальная длина для типа равна 50. Давайте создадим пример

import pandas as pd
n = 4001
df = pd.DataFrame({"a":["wcewcvevc"] * n ,
                   "b":["2019-01-01"] * n,
                   "c":[1.01] * n,
                   "d":[25] * n})
df["b"] = df["b"].astype("M8[us]")
out = []
for col in df.columns:
    out.append([len(str(type(df[col].iloc[4000]))),len(str(df[col].iloc[4000]))])
pd.DataFrame(out).max().tolist()
# output [50, 19]

# then you can define a layout as
lyt = "{:<55}{:24}"

# and print
for col in df.columns:
    print(lyt.format(str(type(df[col].iloc[4000])), str(df[col].iloc[4000])))

и получим

<class 'str'>                                          wcewcvevc               
<class 'pandas._libs.tslibs.timestamps.Timestamp'>     2019-01-01 00:00:00     
<class 'numpy.float64'>                                1.01                    
<class 'numpy.int64'>                                  25     

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...