我有一个简单的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
答案 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使用。