您可以使用
.to_csv()
将DataFrame导出为csv文件,并使用
.read_csv()
读取它。我根据您已有的代码进行了如下扩展:
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)
df.to_csv('out.csv')
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
完全相同,这表明导出和期望的导入正在按照预期工作。
编辑以导出列和索引名称:
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
我不知道为什么你需要导出索引和列的名称。如果你只是想访问行或列的名称,可以像这样获取它们的标签:
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)