我想将dat
文件读入pandas
(我使用read_table()
),在文件中,每行观察被分成多行,如下所示:< / p>
var1 var2 var3
var4 var5 var6
1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
4 5 6
在这种情况下,每个观察分为两行。
答案 0 :(得分:1)
您可以在函数read_csv
中使用参数skiprows
和header
:
import pandas as pd
import io
temp=u"""var1 var2 var3
var4 var5 var6
1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
4 5 6"""
print range(0, 10)[1::2]
[1, 3, 5, 7, 9]
#after testing replace io.StringIO(temp) to filename
df1 = pd.read_csv(io.StringIO(temp),
sep='\s+',
header=0,
index_col=None,
skiprows=(range(0, 10)[1::2]))
print df1
var1 var2 var3
0 1 2 3
1 1 2 3
2 1 2 3
print range(2, 10)[::2]
[2, 4, 6, 8]
#after testing replace io.StringIO(temp) to filename
df2 = pd.read_csv(io.StringIO(temp),
sep='\s+',
header=1,
index_col=None,
skiprows=(range(2, 10)[::2]))
print df2
var4 var5 var6
0 4 5 6
1 4 5 6
2 4 5 6
或者您可以使用Paul
中的header=[0,1]
和函数droplevel
进行后处理(建议为read_csv
)。最后你可以reset_index
:
import pandas as pd
import io
temp=u"""var1 var2 var3
var4 var5 var6
1 2 3
4 5 6
1 2 3
4 5 6
1 2 3
4 5 6"""
df = pd.read_csv(io.StringIO(temp),
sep='\s+',
header=[0,1])
print df
var1 var2 var3
var4 var5 var6
0 1 2 3
1 4 5 6
2 1 2 3
3 4 5 6
4 1 2 3
5 4 5 6
df1 = df[::2]
df1.columns=df.columns.droplevel(1)
print df1.reset_index(drop=True)
var1 var2 var3
0 1 2 3
1 1 2 3
2 1 2 3
df1 = df[1::2]
df1.columns=df.columns.droplevel(0)
print df1.reset_index(drop=True)
var4 var5 var6
0 4 5 6
1 4 5 6
2 4 5 6