我目前正在处理一组具有双标头的类似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文件。
答案 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=',')