Вывод данных из всех столбцов в фрейме данных в 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 снова)