Вывод данных из всех столбцов в фрейме данных в pandas

У меня есть файл csv с именем params.csv. Я открыл ipython qtconsole и создал pandas dataframe, используя:

import pandas
paramdata = pandas.read_csv('params.csv', names=paramnames)

где paramnames - это список строковых объектов на языке python. Пример paramnames (длина фактического списка - 22):

paramnames = ["id",
"fc",
"mc",
"markup",
"asplevel",
"aspreview",
"reviewpd"]

В приглашении ipython, если я набираю paramdata и нажимаю Enter, я не получаю dataframe со столбцами и значениями, как показано в примерах на Pandas сайт. Вместо этого я получаю информацию о фрейме данных. Я получаю:

In[35]: paramdata
Out[35]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 59 entries, 0 to 58
Data columns:
id                    59  non-null values
fc                    59  non-null values
mc                    59  non-null values
markup                59  non-null values
asplevel              59  non-null values
aspreview             59  non-null values
reviewpd              59  non-null values

Если я наберу paramdata['mc'], тогда я получу значения, как ожидалось, для столбца mc. У меня есть два вопроса:

(1) В примерах на веб-сайте pandas (см., например, вывод df здесь: http://pandas.sourceforge.net/indexing.html#additional-column-access) ввод имени фрейма данных дает фактические данные. Почему я получаю информацию о фрейме данных, как показано выше, вместо фактических данных? Мне нужно установить некоторые параметры вывода где-нибудь?

(2) Как я могу выводить все столбцы в фреймворке данных на экран без ввода их имен, т.е. без ввода типа paramdata[['id','fc','mc']].

Я использую pandas версию 0.8.

Спасибо.

Ответ 1

На экране отображается слишком много данных, поэтому вместо этого отображается сводка.

Если вы хотите вывести данные в любом случае (это, вероятно, не поместится на экране и выглядит не очень хорошо):

print paramdata.values

преобразует фрейм данных в его матричное представление numpy-array.

paramdata.columns

хранит соответствующие имена столбцов и

paramdata.index

хранит соответствующий индекс (имена строк).

Ответ 2

Использование:

pandas.set_option('display.max_columns', 7)

Это заставит панд отображать 7 ваших столбцов. Или в целом:

pandas.set_option('display.max_columns', None)

что заставит его отображать любое количество столбцов.

Объяснение: значение по умолчанию для max_columns равно 0, что говорит Pandas отображать таблицу только в том случае, если все столбцы могут быть сжаты в ширину вашей консоли.

Кроме того, вы можете изменить ширину консоли (в символах) по умолчанию, равную 80, используя, например:

pandas.set_option('display.width', 200)

Ответ 3

Я знаю, что это старый вопрос, но у меня только что была похожая проблема, и я думаю, что то, что я сделал, сработало бы и для вас.

Я использовал метод to_csv() и написал в stdout:

import sys

paramdata.to_csv(sys.stdout)

Это должно создать дамп целого фрейма данных, независимо от того, хорош ли он для печати или нет, и вы можете использовать параметры to_csv для настройки разделителей столбцов, для печати индекса и т.д.

Редактировать: теперь можно использовать None в качестве цели для .to_csv() с похожим эффектом, что, возможно, намного приятнее:

paramdata.to_csv(None)

Ответ 4

В ipython, я использую это для печати части кадра данных, который работает достаточно хорошо (печатает первые 100 строк):

print paramdata.head(100).to_string()

Ответ 5

вы также можете использовать DataFrame.head(x)/.tail(x) для отображения первых/последних x строк DataFrame.

Ответ 6

Я перехожу к python из R, и функция R head() оборачивает строки очень удобным способом просмотра данных:

> head(cbind(mtcars, mtcars, mtcars))
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb  mpg cyl
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 21.0   6
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 21.0   6
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 22.8   4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 21.4   6
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 18.1   6
                  disp  hp drat    wt  qsec vs am gear carb  mpg cyl disp  hp
Mazda RX4          160 110 3.90 2.620 16.46  0  1    4    4 21.0   6  160 110
Mazda RX4 Wag      160 110 3.90 2.875 17.02  0  1    4    4 21.0   6  160 110
Datsun 710         108  93 3.85 2.320 18.61  1  1    4    1 22.8   4  108  93
Hornet 4 Drive     258 110 3.08 3.215 19.44  1  0    3    1 21.4   6  258 110
Hornet Sportabout  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8  360 175
Valiant            225 105 2.76 3.460 20.22  1  0    3    1 18.1   6  225 105
                  drat    wt  qsec vs am gear carb
Mazda RX4         3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     3.90 2.875 17.02  0  1    4    4
Datsun 710        3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 3.15 3.440 17.02  0  0    3    2
Valiant           2.76 3.460 20.22  1  0    3    1

Я разработал следующую маленькую функцию Python для имитации этой функциональности:

def rhead(x, nrow = 6, ncol = 4):
    pd.set_option('display.expand_frame_repr', False)
    seq = np.arange(0, len(x.columns), ncol)
    for i in seq:
        print(x.loc[range(0, nrow), x.columns[range(i, min(i+ncol, len(x.columns)))]])
    pd.set_option('display.expand_frame_repr', True)

(это, конечно, зависит от панд и пупка)

Ответ 7

вы можете использовать синтаксис разреза строки i.e

paramdata[:5] # first five records
paramdata[-5:] # last five records
paramdata[:] # all records

иногда фреймворк данных может не вписываться в экранный буфер, и в этом случае вам, вероятно, лучше будет либо печатать небольшое подмножество, либо экспортировать его на что-то другое, заговорить или (csv снова)