Вы можете экспортировать DataFrame в CSV-файл с помощью .to_csv()
и читать его обратно при помощи .read_csv()
. Я продлил код, который вы уже следующим образом:
#!/usr/bin/env python3
# coding: utf-8
import numpy as np
import pandas as pd
I = pd.Index(["a", "b", "c", "d"], "rows")
C = pd.Index(["col0", "col1", "col2"], "cols")
df = pd.DataFrame(data=np.random.rand(4,3), index=I, columns=C)
# export DataFrame to csv
df.to_csv('out.csv')
# set index_col in order to read first column as indices
df_in = pd.read_csv('out.csv', index_col=0)
Так DataFrame df
выглядит следующим образом:
col0 col1 col2
a 0.590016 0.834033 0.535310
b 0.421589 0.897302 0.029500
c 0.373580 0.109005 0.239181
d 0.473872 0.075918 0.751628
в формате CSV файл out.csv
выглядит следующим образом:
,col0,col1,col2
a,0.5900160748408918,0.8340332218911729,0.5353103406507513
b,0.42158899389955884,0.8973015040807538,0.029500416731096046
c,0.37357951184145965,0.10900495955642386,0.2391805787788026
d,0.47387186813644167,0.07591794371425187,0.7516279365972057
Чтение данные обратно в DataFrame df_in
следующим образом:
col0 col1 col2
a 0.590016 0.834033 0.535310
b 0.421589 0.897302 0.029500
c 0.373580 0.109005 0.239181
d 0.473872 0.075918 0.751628
Таким образом, df2
точно такой же, как df
, который показывает, что экспорт и требуемый импорт работают должным образом.
EDIT для экспорта столбцов и индексов имен:
df.to_csv('out.csv', index_label=[df.index.name, df.columns.name])
Однако это делает повторное импортирование немного трудно, так как название колонки добавляются в качестве дополнительного столбца. Обычно это полезно для данных с несколькими индексами, но приводит к дополнительному пустому столбцу.
Так что я хотел бы предложить, чтобы экспортировать имя индекса, только:
# export DataFrame to csv
df.to_csv('out.csv', index_label=df.index.name)
# set index_col in order to read first column as indices
df_in = pd.read_csv('out.csv', index_col=0)
, что приводит к df_in
как:
col0 col1 col2
rows
a 0.442467 0.959260 0.626502
b 0.639044 0.989795 0.853002
c 0.576137 0.350260 0.532920
d 0.235698 0.095978 0.194151
Я не знаю, почему вам нужно экспортировать имена как индекс и colums.Если вы просто хотите получить доступ имен строк или столбцов вы можете получить их этикетку, как это:
column_labels = df.columns.get_values()
>>> array(['col0', 'col1', 'col2'], dtype=object)
index_labels = df.index.get_values()
>>> array(['a', 'b', 'c', 'd'], dtype=object)
Первая версия кода была неправильной (имена не сохранились). Простите за это. –
Доступ и экспорт имен индекса и столбцов не является проблемой вообще. Тем не менее, я думаю о правильном способе импорта экспортированных данных, поскольку это имеет смысл при использовании только нескольких индексов. Но вам не нужно использовать мультииндекс для правильного доступа к вашим данным. – albert