是否可以在一个文件中写入和读取多个DataFrame?

时间:2017-08-24 11:21:42

标签: python pandas csv dataframe

我目前正在处理一组具有双标头的类似DataFrame。 它们具有以下结构:

   age height weight shoe_size
   RHS height weight shoe_size
0  8.0    6.0    2.0       1.0
1  8.0    NaN    2.0       1.0
2  6.0    1.0    4.0       NaN
3  5.0    1.0    NaN       0.0
4  5.0    NaN    1.0       NaN
5  3.0    0.0    1.0       0.0

   height  weight shoe_size   age
      RHS  weight shoe_size   age
0     1.0    1.0        NaN   NaN
1     1.0    2.0        0.0   2.0
2     1.0    NaN        0.0   5.0
3     1.0    2.0        0.0   NaN
4     0.0    1.0        0.0   3.0

实际上,主要区别在于第一个Header行的排序,它们可以对所有这些行进行排序,以及RHS标题列在第二个Header行中的位置。我目前想知道是否有一种简单的方法可以将所有这些DataFrame保存/读取到单个CSV文件中,而不是为每个文件保存不同的CSV文件。

2 个答案:

答案 0 :(得分:1)

不幸的是,没有任何合理的方法可以在一个CSV中存储多个数据帧,因此检索每个数据帧不会过于繁琐,但您可以使用[Header Title](#header-title)并将其保存到单个单独的{{1}页中1}}文件:

pd.ExcelWriter

答案 1 :(得分:1)

收回你的例子(用随机数而不是你的值):

import pandas as pd
import numpy as np

h1 = [['age', 'height', 'weight', 'shoe_size'],['RHS','height','weight','shoe_size']]
df1 = pd.DataFrame(np.random.randn(3, 4), columns=h1)

h2 = [['height', 'weight', 'shoe_size','age'],['RHS','weight','shoe_size','age']]
df2 = pd.DataFrame(np.random.randn(3, 4), columns=h2)

首先,重新排序列(How to change the order of DataFrame columns?):

df3 = df2[h1[0]]

然后,连接两个数据帧(Merge, join, and concatenate):

df4 = pd.concat([df1,df3])

我不知道你想如何处理标题的第二行(现在,它只是使用两个子列,这不是很优雅)。如果,就你的观点而言,这一行没有意义,只需在连接之前重置你想要的标题:

df1.columns=h1[0]
df3.columns=h1[0]

df5 = pd.concat([df1,df3])

最后,将其保存为CSV格式(pandas.DataFrame.to_csv):

df4.to_csv('file_name.csv',sep=',')