使用多个标题读取CSV

时间:2014-04-19 02:36:14

标签: csv pandas

我有一个简单的CSV文件,我无法弄清楚如何进入数据框。

test.csv

h1 h2 h3
11 12 13

h4 h5 h6
14 15 16

正如您所看到的,上面的csv被分成两个单独的文件,然后将它们读入数据帧将很容易。每组数据之间都有一个空格,它们的长度始终相同。

我要创建的数据框:

h1 h2 h3 h4 h5 h6  
11 12 13 14 15 16  

2 个答案:

答案 0 :(得分:6)

比CT朱的解决方案效率低且聪明,但可能更简单一点:

import pandas as pd
from StringIO import StringIO

with open ('foo.csv', 'r') as myfile:
    data = myfile.read().split('\n\n')

pieces = [pd.read_csv(StringIO(x),sep=' ') for x in data]
print pd.concat(pieces,axis=1)

   h1  h2  h3  h4  h5  h6
0  11  12  13  14  15  16
1  10  10  10  10  10  10

答案 1 :(得分:1)

该数据肯定不是友好的形式,即使每个部分中有多行数据,以下解决方案也应该有效:

In [67]:

%%file temp.csv
h1 h2 h3
11 12 13
10 10 10

h4 h5 h6
14 15 16
10 10 10
Overwriting temp.csv
In [68]:

df=pd.read_csv('temp.csv', sep=' ', header=None)
df=df.dropna()
df.index=df[0].map(lambda x: not x.isdigit()).cumsum()
gp=df.groupby(df.index)
df2=np.hstack([gp.get_group(i) for i in gp.groups])
In [69]:

print pd.DataFrame(df2[1:].astype(float),columns=df2[0])
   h1  h2  h3  h4  h5  h6
0  11  12  13  14  15  16
1  10  10  10  10  10  10

[2 rows x 6 columns]

任何人都有更好的想法,特别是内存占用更少的解决方案?在这里,我构建了一个新的numpy array df2,这肯定意味着更多的RAM使用。