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

2024-05-16 12:10:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

   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

实际上,主要的区别在于第一个标题行的排序(所有标题行都可以相同),以及RHS标题列在第二个标题行中的位置。我现在在想,是否有一种简单的方法可以将所有这些数据帧保存/读取到一个CSV文件中,而不是每个文件都有一个不同的CSV文件。在


Tags: 文件csv数据标题agesize排序nan
2条回答

举个例子(用随机数代替数值):

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?):

^{pr2}$

然后,连接两个数据帧(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=',')

不幸的是,没有任何合理的方法可以在一个CSV中存储多个数据帧,这样检索每个数据帧就不会非常麻烦,但是您可以使用pd.ExcelWriter并将其保存到单个.xlsx文件中的单独工作表中:

import pandas as pd

writer = pd.ExcelWriter('file.xlsx')
for i, df in enumerate(df_list):
    df.to_excel(writer,'sheet{}'.format(i))
writer.save() 

相关问题 更多 >