pandas:如何读取分割行的文件

时间:2016-01-30 05:20:03

标签: python pandas dataframe rows

我想将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

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

1 个答案:

答案 0 :(得分:1)

您可以在函数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

或者您可以使用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