pandas: 如何读取分行文件

pandas: how to read file with divided rows

我想把一个dat文件读入pandas(我用的是read_table()),在文件中每行观察被分成多行,像这样:

var1 var2 var3
var4 var5 var6
1    2    3
4    5    6
1    2    3
4    5    6
1    2    3
4    5    6

在这种情况下,每个观察值分为两行。

您可以在函数 read_csv:

中使用参数 skiprowsheader
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

或者您可以使用 read_csv 中的 header=[0,1] 和函数 droplevel 的后处理(如 所建议的那样)。最后你可以 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