读取具有多个标题的CSV
我有一个简单的CSV文件,我不知道如何拉入数据帧 test.csv读取具有多个标题的CSV,csv,pandas,Csv,Pandas,我有一个简单的CSV文件,我不知道如何拉入数据帧 test.csv h1 h2 h3 11 12 13 h4 h5 h6 14 15 16 正如您所看到的,如果上面的csv被分割成两个单独的文件,那么将它们读入数据帧将很容易。每套数据之间都有一个空格,而且它们的长度总是相同的 我要创建的数据帧: H1H2H3H4H5H6 11 12 13 14 15 16 数据肯定不是友好的形状,即使每个部分中有多行数据,以下解决方案也应该有效: In [67]: %%file temp.csv h1
h1 h2 h3
11 12 13
h4 h5 h6
14 15 16
正如您所看到的,如果上面的csv被分割成两个单独的文件,那么将它们读入数据帧将很容易。每套数据之间都有一个空格,而且它们的长度总是相同的
我要创建的数据帧:
H1H2H3H4H5H6
11 12 13 14 15 16
数据肯定不是友好的形状,即使每个部分中有多行数据,以下解决方案也应该有效:
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
阵列
df2
,这当然意味着更多的RAM使用。比CT Zhu的解决方案效率和智能更低,但可能更简单:
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